std::string
을 복사하지 않고 두 개 이상의 부분 문자열로 나눌 수 있습니까? 복사 생성자를 사용하여 복사하지 않고 std::string
을 새로 만들 수 있습니다.복사하지 않고 std :: string을 나누기
답변
std::string
으로는이 작업을 수행 할 수 없습니다. 그러나 C++에서 std::string_view
을 사용하여이 작업을 수행 할 수 있습니다.
예 : 뷰가 사용된다
std::string str = "TheBigStr";
std::string_view p1 = std::string_view(str.data() + 3, 3);
문자열 뷰는 데이터를 복사하지 않고, 그래서 str
수정되어서는 안된다.
C + + 17 컴파일러에 액세스 할 수 없기 때문에 수치 스럽습니다. 누군가가 C++로 그것을 할 수있는 방법을 생각해 내면이 대답을 받아들이 기 전에 조금 기다릴 것입니다. –
@AlessandroPower 인터넷에 떠 다니는 타사 string_ref/string_view 구현이 몇 가지 있습니다. 최근 프로젝트 중 하나에서 사용했습니다. – antred
C++ 17 컴파일러가 필요하지 않을 수도 있습니다. GCC의 libstdC++는 C++ 14 이상에서'std :: experimental :: string_view'를 제공합니다. LLVM의 libC++는 C++ 11 이상에 대해'std :: string_view'를 제공합니다. –
어떤 컴파일러를 사용하고 있는지 모르지만 Microsoft의 GSL에는 기본적으로 string_view 인 string_span이 있습니다.
예를 들어 설명해 주시겠습니까? – mpaskov
- 1. std :: string_view를 복사하지 않고 std :: ostringstream에서 가져 오는 방법은 무엇입니까?
- 2. 복사하지 않고 파일에 std :: ostringstream을 쓰고 싶습니까?
- 3. 복사하지 않고 std :: string에서 스트리밍 하시겠습니까?
- 4. 복사하지 않고 std :: stringstream의 길이를 얻는 방법
- 5. 소스를 수정하지 않고 std :: string을 대문자로 변환합니다.
- 6. std :: string을 std :: vector로 변환
- 7. 복사하지 않고 데이터에서 문자열
- 8. Emacs : 텍스트를 복사하지 않고 (복사하지 않고)
- 9. std :: string을 뒤집는 방법?
- 10. std :: string을 QwtText로 변환하십시오.
- 11. std :: string을 char로 복사 *
- 12. std :: string을 uint8로 변환 *
- 13. std :: string을 char [] [] 배열에 넣기
- 14. 복사하지 않고 벡터에 valarray 변환
- 15. std :: cout은 std :: string을 어떻게 인쇄합니까?
- 16. std :: string을 std :: map의 키로 사용하기
- 17. 복사하지 않고 기존 버퍼에 std :: istream 인터페이스를 제공하십시오.
- 18. C++ 기존 인스턴스를 복사하지 않고 std :: list :: push_back
- 19. NSData * to std :: vector <부호없는 char> 복사하지 않고
- 20. 복사하지 않고 stable_sort하는 방법은 무엇입니까?
- 21. std :: string을 basic_ostream로 변환 하시겠습니까?
- 22. std :: string을 LPVOID로 변환하는 방법
- 23. std :: string을 사용하여 파일 열기
- 24. std :: string을 라이브러리 API에 전달
- 25. 복사 생성자가 std :: string을 변경합니다.
- 26. std :: string을 SQLWCHAR로 변환하는 방법 *
- 27. std :: string을 상속하는 방법은 무엇입니까?
- 28. std :: string을 WCHAR로 변환하는 방법
- 29. 이진 파일에서 std :: string을 읽음
- 30. QString/std :: string을 QImage로 변환
전체 문자열 만 이동할 수 있습니다. 그것은 이동 된 객체입니다 –
절대적으로 사본을 피할 필요가 있다면 반복자/색인 및 길이 쌍을 사용하여 하위 문자열이 어디에 있는지 기억할 수 없습니까? 또는 스택 할당자를 사용하여 std :: basic_string 객체를 더 저렴하게 복사 할 수 있습니다. – antred
@antred'std :: string's를 매개 변수로받는 함수를 이미 작성했습니다. 이러한 기능을 다시 작성하는 것은 세상 끝이 아니지만 나는하지 않을 것입니다. –