'C++' string_view

토스트·2024년 12월 15일
0

'C++' basic

목록 보기
8/35

string_view

C++17에서 추가된 매우 유용한 클래스 템플릿으로, 문자열 데이터를 읽기 전용으로 다룰 때 효율성을 극대화할 수 있도록 설계되었습니다. std::string_view는 문자열의 내용을 복사하지 않고도 문자열 데이터를 참조할 수 있게 해 주며, 이는 특히 대용량 문자열을 처리할 때 성능을 향상시킬 수 있습니다.

특징

  • 읽기 전용 : std::string_view는 문자열 데이터를 수정할 수 없습니다. 데이터에 대한 참조만 제공합니다.
  • 복사 비용 없음 : std::string_view는 문자열의 내용을 복사하지 않고, 문자열의 시작 위치와 길이를 저장하는 방식으로 작동합니다. 이를 통해 문자열을 다룰 때 불필요한 복사를 피해 메모리 사용량이 적고, 성능이 향상될 수 있습니다.
  • 유연성 : std::string_view는 C-style 문자열(const char*)이나 std::string 등 다양한 문자열 타입에 대해 사용할 수 있습니다.

간단한 예시

#include <iostream>
#include <string_view>

using namespace std;

void print_view(string_view str_view) {
    cout << str_view << endl;
}

int main() {
    string str = "Hello, world!";
    print_view(str);           // string을 전달
    print_view("Hello, C++");  // C-style 문자열을 전달
}

주의사항

  • 만약 원본 문자열이 사라지면, std::string_view는 무효한 참조를 가질 수 있습니다.

string VS string_view

std::string

  • 문자열을 저장할 때 메모리를 할당하고, 메모리 관리를 자동으로 처리합니다.
  • 문자열의 복사본을 만들기 때문에, 문자열을 수정하거나 문자열을 복사해야 할 때 성능상 오버헤드가 발생할 수 있습니다.
  • 메모리를 할당하므로, 문자열의 내용이 변경되거나 소멸될 때 소유권이 중요합니다.

std::string_view

  • 읽기 전용 문자열 View로, 문자열을 복사하지 않고 참조만 합니다.
  • 메모리를 복사하지 않기 때문에, 성능적으로 더 효율적입니다. 특히 큰 문자열을 다룰 때 유리합니다.
  • 소유권을 가지지 않고, 단지 문자열의 보기만 제공합니다.

'const string &' VS 'string_view' : 함수 매개변수로서의 차이점

const string &의 경우 std::string만을 처리할 수 있지만, std::string_view의 경우는 C-style 문자열이나 std::string 객체 등 다양한 타입의 문자열도 처리할 수 있습니다.

0개의 댓글