Namespaces
Variants

std::basic_string

cppreference.net에서 가져옴
 
 
 
std::basic_string
 
헤더 <string>
template<
    class CharT,
    class Traits = std::char_traits<CharT>,
    class Allocator = std::allocator<CharT>
> class basic_string;
에 정의됨 (1)
namespace pmr {
template<
    class CharT,
    class Traits = std::char_traits<CharT>
> using basic_string =
    std::basic_string<CharT, Traits, std::pmr::polymorphic_allocator<CharT>>;
}
(2) (C++17부터)

클래스 템플릿 basic_string은 문자-유사 객체(TrivialType 및 StandardLayoutType인 비-배열 객체)의 시퀀스를 저장하고 조작합니다. 이 클래스는 문자 유형이나 해당 유형에 대한 연산의 특성에 의존하지 않습니다. 연산의 정의는 템플릿 매개변수( std::char_traitsTraits의 특수화 또는 호환 가능한 특성 클래스)를 통해 제공됩니다. 의 요소는 연속적으로 저장됩니다. 즉,

에 대해, basic_string의 basic_string s에 있는 임의의 &*(s.begin() + n) == &*s.begin() + n에 대해 n이고, [0, s.size())은 값 *(s.begin() + s.size())(널 종결자)을 갖습니다CharT()(C++11부터); 또는 동등하게, 에 대한 포인터는 s[0]의 첫 번째 요소에 대한 포인터를 기대하는 함수에 전달될 수 있습니다(C++11까지)(C++11부터)널-종결 배열의 .CharT

std::basic_string은 AllocatorAwareContainer(단, 사용자 정의 construct/destroy는 요소의 생성/소멸에 사용되지 않음), SequenceContainer 및 ContiguousContainer의 요구 사항을 충족합니다(C++17부터)

.Traits::char_type 만약 Allocator::char_type와 CharT 중 하나라도

와 다르면, 프로그램은 ill-formed입니다. std::basic_string의 모든 멤버 함수는 constexpr입니다: 상수 표현식 평가에서 std::basic_string 객체를 생성하고 사용하는 것이 가능합니다.

그러나 constexpr std::basic_string 변수를 정의하는 것은 일반적으로 오류입니다. 상수 평가는 동적으로 할당된 모든 스토리지가 동일한 평가 내에서 해제되어야 하기 때문이며, 이는 일반적으로 std::basic_string의 초기화자에서는 해당되지 않습니다.

(C++20부터)

일반적인 문자 유형에 대한 여러 typedef가 제공됩니다:

헤더 <string>
에 정의됨 유형 정의
std::string std::basic_string<char>
std::wstring std::basic_string<wchar_t>
std::u8string 자명하지 않은 기본 생성자(C++20) std::basic_string<char8_t>
std::u16string 자명하지 않은 복사 생성자(C++11) std::basic_string<char16_t>
std::u32string 자명하지 않은 이동 생성자(C++11) std::basic_string<char32_t>
std::pmr::string 자명하지 않은 복사 할당(C++17) std::pmr::basic_string<char>
std::pmr::wstring 자명하지 않은 이동 할당(C++17) std::pmr::basic_string<wchar_t>
std::pmr::u8string 자명하지 않은 소멸자(C++20) std::pmr::basic_string<char8_t>
std::pmr::u16string 자명하지 않은 비교 연산자(C++17) std::pmr::basic_string<char16_t>
std::pmr::u32string 자명하지 않은 사전순 비교 연산자(C++17) std::pmr::basic_string<char32_t>

템플릿 매개변수

CharT - 문자 타입
Traits - 문자 타입에 대한 연산을 지정하는 traits 클래스
Allocator - Allocator 내부 저장소 할당에 사용되는 할당자 타입

중첩 타입

유형 정의
traits_type Traits
value_type CharT
allocator_type Allocator
size_type
Allocator::size_type (C++11 이전)
std:: allocator_traits < Allocator > :: size_type (C++11 이후)
difference_type
Allocator :: difference_type (C++11 이전)
std:: allocator_traits < Allocator > :: difference_type (C++11 이후)
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(C++11 이전)

std:: allocator_traits < Allocator > :: pointer

(C++11 이후)
const_pointer

Allocator::const_pointer

(C++11 이전)

std:: allocator_traits < Allocator > :: const_pointer

(C++11 이후)
iterator

LegacyRandomAccessIterator 와 LegacyContiguousIterator 를 만족하는 value_type 에 대한 반복자

(C++20 이전)

LegacyRandomAccessIterator , contiguous_iterator , 그리고 ConstexprIterator 를 만족하는 value_type 에 대한 반복자

(C++20 이후)
const_iterator

LegacyRandomAccessIterator 와 LegacyContiguousIterator 를 만족하는 const value_type 에 대한 반복자

(C++20 이전)

LegacyRandomAccessIterator , contiguous_iterator , 그리고 ConstexprIterator 를 만족하는 const value_type 에 대한 반복자

(C++20 이후)
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

데이터 멤버

constexpr size_type npos [static] 특수 값 size_type ( - 1 ) , 정확한 의미는 컨텍스트에 따라 다름

멤버 함수

basic_string 을 생성합니다
(public 멤버 함수)
문자열을 파괴하며, 사용된 내부 저장소를 해제합니다
(public member function)
문자열에 값을 할당합니다
(public member function)
문자열에 문자들을 할당
(public member function)
문자열에 문자 범위를 할당
(public member function)
연결된 할당자 반환
(public member function)
요소 접근
지정된 문자에 경계 검사와 함께 접근
(public member function)
지정된 문자에 접근합니다
(public member function)
( DR* )
첫 번째 문자에 접근
(public member function)
( DR* )
마지막 문자에 접근
(public member function)
문자열의 첫 번째 문자에 대한 포인터를 반환합니다
(public member function)
문자열의 수정 불가능한 표준 C 문자 배열 버전을 반환합니다
(public member function)
전체 문자열에 대한 수정 불가능한 basic_string_view 를 반환합니다
(public member function)
반복자
시작 부분에 대한 반복자를 반환합니다
(public member function)
(C++11)
끝에 대한 반복자를 반환합니다
(public member function)
시작 부분으로의 역방향 반복자를 반환합니다
(public member function)
(C++11)
역방향 반복자를 끝 위치로 반환합니다
(public member function)
용량
문자열이 비어 있는지 확인합니다
(public member function)
문자 수를 반환합니다
(public member function)
최대 문자 수를 반환합니다
(public member function)
저장소 예약
(public member function)
현재 할당된 저장 공간에 보관할 수 있는 문자 수를 반환합니다
(public member function)
사용하지 않는 메모리를 해제하여 메모리 사용량을 줄입니다
(public member function)
수정자
내용을 지웁니다
(public member function)
문자 삽입
(public member function)
문자 범위를 삽입합니다
(public member function)
문자 제거
(public member function)
끝에 문자를 추가합니다
(public member function)
( DR* )
마지막 문자를 제거합니다
(public member function)
끝에 문자들을 추가함
(public member function)
문자 범위를 끝에 추가합니다
(public member function)
끝에 문자를 추가합니다
(public member function)
문자열의 지정된 부분을 대체합니다
(public member function)
문자열의 지정된 부분을 문자 범위로 대체합니다
(public member function)
문자 복사
(public member function)
저장된 문자 수를 변경합니다
(public member function)
저장된 문자 수를 변경하고 사용자 제공 연산을 통해 불확정 내용을 덮어쓸 수 있습니다
(public member function)
내용을 교환합니다
(public member function)
검색
주어진 부분 문자열의 첫 번째 발생 위치를 찾습니다
(public member function)
부분 문자열의 마지막 발생 위치 찾기
(public member function)
문자들의 첫 번째 발생 위치 찾기
(public member function)
문자를 찾지 못한 첫 위치 찾기
(public member function)
문자들의 마지막 발생 위치 찾기
(public member function)
문자 없음의 마지막 위치 찾기
(public member function)
연산
두 문자열을 비교합니다
(public 멤버 함수)
문자열이 주어진 접두사로 시작하는지 확인합니다
(public 멤버 함수)
(C++20)
문자열이 주어진 접미사로 끝나는지 확인합니다
(public 멤버 함수)
(C++23)
문자열이 주어진 부분 문자열이나 문자를 포함하는지 확인합니다
(public 멤버 함수)
부분 문자열을 반환합니다
(public 멤버 함수)
(C++26)
부분 뷰를 반환합니다
(public 멤버 함수)

비멤버 함수

두 문자열, 문자열과 char , 또는 문자열과 string_view 를 연결합니다.
(함수 템플릿)
(C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20)
두 문자열을 사전식으로 비교합니다.
(함수 템플릿)
std::swap 알고리즘을 특수화합니다.
(함수 템플릿)
특정 조건을 만족하는 모든 요소를 지웁니다.
(함수 템플릿)
입력/출력
문자열에 대한 스트림 입력 및 출력을 수행합니다.
(함수 템플릿)
I/O 스트림에서 데이터를 읽어 문자열로 저장합니다.
(함수 템플릿)
숫자 변환
(C++11) (C++11) (C++11)
문자열을 부호 있는 정수로 변환합니다.
(함수)
(C++11) (C++11)
문자열을 부호 없는 정수로 변환합니다.
(함수)
(C++11) (C++11) (C++11)
문자열을 부동 소수점 값으로 변환합니다.
(함수)
(C++11)
정수 또는 부동 소수점 값을 string 으로 변환합니다.
(함수)
(C++11)
정수 또는 부동 소수점 값을 wstring 으로 변환합니다.
(함수)

리터럴

인라인 네임스페이스에 정의됨 std::literals::string_literals
문자 배열 리터럴을 basic_string 으로 변환
(함수)

헬퍼 클래스

문자열을 위한 해시 지원
(클래스 템플릿 특수화)

추론 가이드 (C++17부터)

반복자 무효화

basic_string 의 요소들을 참조하는 레퍼런스, 포인터, 반복자들은 basic_string 에 대한 비상수 레퍼런스를 인자로 받는 표준 라이브러리 함수들(예: std::getline , std::swap , 또는 operator>> ) 및 비상수 멤버 함수 호출에 의해 무효화될 수 있습니다. 단, operator[] , at , data , front , back , begin , rbegin , end , 그리고 rend 는 예외입니다.

참고 사항

C++23까지는 std::basic_string 의 요소를 생성하거나 소멸할 때 사용자 정의 construct 또는 destroy 를 사용해야 하지만, 모든 구현체는 기본 메커니즘만 사용했습니다. 이 요구사항은 P1072R10 을 통해 기존 관행에 맞게 수정되었습니다.

기능 테스트 매크로 값 표준 기능
__cpp_lib_string_udls 201304L (C++14) 문자열 타입에 대한 사용자 정의 리터럴
__cpp_lib_starts_ends_with 201711L (C++20) starts_with , ends_with
__cpp_lib_constexpr_string 201907L (C++20) std::basic_string 에 대한 constexpr
__cpp_lib_char8_t 201907L (C++20) std::u8string
__cpp_lib_erase_if 202002L (C++20) erase , erase_if
__cpp_lib_string_contains 202011L (C++23) contains
__cpp_lib_string_resize_and_overwrite 202110L (C++23) resize_and_overwrite
__cpp_lib_containers_ranges 202202L (C++23) 컨테이너 호환 범위 를 허용하는 생성, 삽입 및 교체를 위한 멤버 함수

예제

#include <iostream>
#include <string>
int main()
{
    using namespace std::literals;
    // const char*로부터 문자열 생성
    std::string str1 = "hello";
    // 문자열 리터럴을 사용하여 문자열 생성
    auto str2 = "world"s;
    // 문자열 연결
    std::string str3 = str1 + " " + str2;
    // 결과 출력
    std::cout << str3 << '\n';
    std::string::size_type pos = str3.find(" ");
    str1 = str3.substr(pos + 1); // 공백 이후 부분
    str2 = str3.substr(0, pos);  // 공백까지의 부분
    std::cout << str1 << ' ' << str2 << '\n';
    // 첨자 연산자[]를 사용한 요소 접근
    std::cout << str1[0] << '\n';
    str1[0] = 'W';
    std::cout << str1 << '\n';
}

출력:

hello world
world hello
w
World

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 530 C++98 basic_string 요소들의 저장 공간 연속성이
LWG259 에 의해 우연히 요구사항에서 제외됨
다시 요구됨
LWG 2861 C++98 value_type 이 Traits::char_type 였음 CharT 로 변경됨
LWG 2994
( P1148R0 )
C++98 Traits::char_type [1] 과 Allocator::char_type 중 어느 하나라도 CharT 와 다른 경우 동작이 정의되지 않음 이러한 경우 프로그램이
ill-formed로 처리됨
  1. ↑ Traits::char_type 케이스는 P1148R0 에서 수정되었습니다.

참고 항목

읽기 전용 문자열 뷰
(클래스 템플릿)

외부 링크

C++ 문자열 처리