std:: basic_string
|
헤더 파일에 정의됨
<string>
|
||
|
template
<
class
CharT,
|
(1) | |
|
namespace
pmr
{
template
<
|
(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
객체를 생성하고 사용하는 것이 가능합니다.
그러나,
|
(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
|
|
||||
difference_type
|
|
||||
reference
|
value_type & | ||||
const_reference
|
const value_type & | ||||
pointer
|
|
||||
const_pointer
|
|
||||
iterator
|
|
||||
const_iterator
|
|
||||
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) |
|
|
(C++23)
|
문자열에 문자 범위를 할당
(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) |
|
|
(C++17)
|
전체 문자열에 대한 수정 불가능한
basic_string_view
를 반환합니다
(public member function) |
반복자 |
|
|
(C++11)
|
시작 부분에 대한 반복자를 반환합니다
(public member function) |
|
(C++11)
|
끝에 대한 반복자를 반환합니다
(public member function) |
|
(C++11)
|
시작 부분으로의 역방향 반복자를 반환합니다
(public member function) |
|
(C++11)
|
역방향 반복자를 끝 위치로 반환합니다
(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) |
|
|
(C++23)
|
문자 범위를 삽입합니다
(public member function) |
|
문자 제거
(public member function) |
|
|
끝에 문자를 추가합니다
(public member function) |
|
|
(
DR*
)
|
마지막 문자를 제거합니다
(public member function) |
|
끝에 문자들을 추가함
(public member function) |
|
|
(C++23)
|
문자 범위를 끝에 추가합니다
(public member function) |
|
끝에 문자를 추가합니다
(public member function) |
|
|
문자열의 지정된 부분을 대체합니다
(public member function) |
|
|
(C++23)
|
문자열의 지정된 부분을 문자 범위로 대체합니다
(public member function) |
|
문자 복사
(public member function) |
|
|
저장된 문자 수를 변경합니다
(public member function) |
|
|
(C++23)
|
저장된 문자 수를 변경하고 사용자 제공 연산을 통해 불확정 내용을 덮어쓸 수 있습니다
(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++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
|
|
|
(C++14)
|
문자 배열 리터럴을
basic_string
으로 변환
(함수) |
헬퍼 클래스
|
(C++11)
|
문자열을 위한 해시 지원
(클래스 템플릿 특수화) |
추론 가이드 (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로 처리됨 |
참고 항목
|
(C++17)
|
읽기 전용 문자열 뷰
(클래스 템플릿) |
외부 링크
| C++ 문자열 처리 |