모두의 코드
C++ 레퍼런스 - basic_string

basic_string

template <class CharT, class Traits = std::char_traits<CharT>,
          class Allocator = std::allocator<CharT> >
class basic_string;

아래는 C++ 17 에 추가된 정의

namespace pmr {
template <class CharT, class Traits = std::char_traits<CharT>>
using basic_string =
  std::basic_string<CharT, Traits, std::polymorphic_allocator<CharT>>
}

basic_string 클래스 템플릿은, char 과 같은 문자의 나열을 저장하고 또 수정하는 작업을 도와줍니다. basic_string 은 문자 타입 자체를 추상화 시켜서 정의되어 있기 때문에, 사용하는 문자의 타입이 특정한 조건들만 만족하게 된다면, basic_string 의 기능을 전부 사용할 수 있습니다.

따라서, basic_string 에 정의된 함수들은 어떠한 문자 타입을 저장하느냐에 무관하게 일반화된 방식으로 작동합니다. 덕분에, 1 바이트 문자든 2 바이트 문자든 어떤 크기의 문자를 사용하냐에 무관하게 라이브러리를 잘 사용할 수 있습니다.

문자 타입들 간의 연산 (비교, 이동 등등)은 Traits 를 통해 정의됩니다.

Traits 를 사용하는 이유는, basic_string어떤 문자가 저장되었냐 에 관련한 로직과, 이 문자들을 어떻게 처리해야 할 것인가 에 관련한 로직을 분리할 수 있기 때문입니다. 전자의 경우 CharT 자체에 의해 처리되고, 후자의 경우 Traits 에서 담당하게 됩니다.

Traitsstd::char_traits 의 특수화 버전이어야만 합니다. 참고로 템플릿 인자인 CharTTraits::char_type 는 반드시 같은 타입이어야만 합니다.

우리가 많이 쓰는 문자 타입인 char 이나 wchar_t 와 같은 타입들의 경우 이미 표준 라이브러리에서 친절하게 Traits 를 정의해주고 있기 때문에, 굳이 따로 걱정할 필요는 없습니다.

참고로 C++ 11 에 와서야 명시된 사실 중 하나로, basic_string 에서 저장된 문자열은 메모리에 반드시 순차적으로 존재해야만 합니다. 예를 들어서 basic_string s 의 경우 0 과 s.size() 의 n 이 오더라도 &*(s.begin() + n) == &*s.begin() + n 가 만족해야만 합니다. 마찬가지로, s[0] 의 주소값은, CharT[] 배열의 첫번째 원소의 주소값과 일치해야만 합니다.

std::basic_stringAllocatorAwareContainer, SequenceContainer, ContiguousContainer (이는 C++ 17 에 추가됨) 을 만족합니다.

자주 수행하는 문자 타입들에 대해 템플릿 특수화 버전들이 기본적으로 제공됩니다.

타입

정의

std::string

std::basic_string<char>

std::wstring

std::basic_string<wchar_t>

std::u16string

std::basic_string<char16_t>

std::u32string

std::basic_string<char32_t>

템플릿 인자들

멤버 타입들

멤버 타입

정의

traits_type

Traits (템플릿 인자)

value_type

CharT (템플릿 인자)

allocator_type

Allocator (템플릿 인자)

size_type

std::allocator_traits<Allocator>::size_type

difference_type

std::allocator_traits<Allocator>::difference_type

reference

value_type&

const_reference

const value_type&

pointer

std::allocator_traits<Allocator>::pointer

const_pointer

std::allocator_traits<Allocator>::const_pointer

iterator

RandomAccessIterator

const_iterator

상수 RandomAccessIterator

reverse_iterator

std::reverse_iterator<iterator>

const_reverse_iterator

std::reverse_iterator<const_iterator>

멤버 함수들

원소 접근 관련 함수들

반복자 관련

문자열 크기/메모리 관련

문자열 작업 관련

문자열 검색 관련

상수

npos : 사용 예에 따라 의미가 달라짐.

비-멤버 함수들

다음은 basic_string 의 멤버 함수는 아니지만, basic_string 과 밀접한 관련이 있는 함수들 입니다.

입출력 관련

데이터 변환 관련

프로필 사진 없음
댓글에 글쓴이에게 큰 힘이 됩니다