Namespaces
Variants

std:: basic_string

From 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 인 비배열 객체입니다. 이 클래스는 문자 유형이나 해당 유형에 대한 연산의 성질에 의존하지 않습니다. 연산들의 정의는 Traits 템플릿 매개변수 - std::char_traits 의 특수화나 호환되는 특성 클래스 - 를 통해 제공됩니다.

basic_string 의 요소들은 연속적으로 저장됩니다. 즉, basic_string s 에 대해, & * ( s. begin ( ) + n ) == & * s. begin ( ) + n [ 0 , s. size ( ) ) 범위의 모든 n 에 대해 성립하며, 또한 * ( s. begin ( ) + s. size ( ) ) CharT ( ) 값(널 종결자)을 가집니다 (C++11부터) . 동등하게 표현하면, s [ 0 ] 에 대한 포인터를 CharT 타입의 배열 (C++11 이전) 널 종결 배열 (C++11부터) 의 첫 번째 요소를 기대하는 함수에 전달할 수 있습니다.

std::basic_string AllocatorAwareContainer 요구사항을 충족합니다 (단, 요소의 생성/소멸에 맞춤화된 construct / destroy 는 사용되지 않음), SequenceContainer 그리고 ContiguousContainer (C++17부터) .

Traits::char_type Allocator::value_type 중 어느 하나라도 CharT 와 다를 경우, 프로그램은 ill-formed입니다.

std::basic_string 의 모든 멤버 함수는 constexpr 입니다: 상수 표현식 평가에서 std::basic_string 객체를 생성하고 사용하는 것이 가능합니다.

그러나, std::basic_string 객체는 일반적으로 constexpr 일 수 없습니다. 왜냐하면 동적으로 할당된 저장 공간은 동일한 상수 표현식 평가에서 해제되어야 하기 때문입니다.

(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 member function)
문자열이 주어진 접두사로 시작하는지 확인합니다
(public member function)
(C++20)
문자열이 주어진 접미사로 끝나는지 확인합니다
(public member function)
(C++23)
문자열이 주어진 부분 문자열이나 문자를 포함하는지 확인합니다
(public member function)
부분 문자열을 반환합니다
(public member function)

비멤버 함수

두 문자열, 문자열과 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++ 문자열 처리