2016-11-15 1 views
3

std::string을 복사하지 않고 두 개 이상의 부분 문자열로 나눌 수 있습니까? 복사 생성자를 사용하여 복사하지 않고 std::string을 새로 만들 수 있습니다.복사하지 않고 std :: string을 나누기

+0

전체 문자열 만 이동할 수 있습니다. 그것은 이동 된 객체입니다 –

+1

절대적으로 사본을 피할 필요가 있다면 반복자/색인 및 길이 쌍을 사용하여 하위 문자열이 어디에 있는지 기억할 수 없습니까? 또는 스택 할당자를 사용하여 std :: basic_string 객체를 더 저렴하게 복사 할 수 있습니다. – antred

+0

@antred'std :: string's를 매개 변수로받는 함수를 이미 작성했습니다. 이러한 기능을 다시 작성하는 것은 세상 끝이 아니지만 나는하지 않을 것입니다. –

답변

5

std::string으로는이 작업을 수행 할 수 없습니다. 그러나 C++에서 std::string_view을 사용하여이 작업을 수행 할 수 있습니다.

예 : 뷰가 사용된다

std::string str = "TheBigStr"; 
std::string_view p1 = std::string_view(str.data() + 3, 3); 

문자열 뷰는 데이터를 복사하지 않고, 그래서 str 수정되어서는 안된다.

+0

C + + 17 컴파일러에 액세스 할 수 없기 때문에 수치 스럽습니다. 누군가가 C++로 그것을 할 수있는 방법을 생각해 내면이 대답을 받아들이 기 전에 조금 기다릴 것입니다. –

+0

@AlessandroPower 인터넷에 떠 다니는 타사 string_ref/string_view 구현이 몇 가지 있습니다. 최근 프로젝트 중 하나에서 사용했습니다. – antred

+2

C++ 17 컴파일러가 필요하지 않을 수도 있습니다. GCC의 libstdC++는 C++ 14 이상에서'std :: experimental :: string_view'를 제공합니다. LLVM의 libC++는 C++ 11 이상에 대해'std :: string_view'를 제공합니다. –

0

어떤 컴파일러를 사용하고 있는지 모르지만 Microsoft의 GSL에는 기본적으로 string_view 인 string_span이 있습니다.

+0

예를 들어 설명해 주시겠습니까? – mpaskov

관련 문제