string[meta header]
std[meta namespace]
class template[meta id-type]
namespace std {
template <class charT ,
class traits = char_traits<charT>,
class Allocator = allocator<charT> >
class basic_string ;
using string = basic_string<char >;
using u8string = basic_string<char8_t >; // C++20から
using u16string = basic_string<char16_t >; // C++11から
using u32string = basic_string<char32_t >; // C++11から
using wstring = basic_string<wchar_t >;
namespace pmr { // C++17から
template <class charT , class traits = char_traits<charT>>
using basic_string =
std::basic_string<charT, traits, polymorphic_allocator<charT>>;
using string = basic_string<char >;
using u8string = basic_string<char8_t >; // C++20から
using u16string = basic_string<char16_t >;
using u32string = basic_string<char32_t >;
using wstring = basic_string<wchar_t >;
}
}
char_traits[link char_traits.md]
allocator[link /reference/memory/allocator.md]
polymorphic_allocator[link /reference/memory_resource/polymorphic_allocator.md]
basic_string
クラスは、あらゆる文字型を使用できる文字列クラスである。
テンプレートパラメータとして文字型を受け取るようになっており、使用を容易にするため、以下のパラメータ設定済みエイリアスが定義されている。
エイリアス
説明
対応バージョン
string
char
型文字列。ASCII、UTF-8等のマルチバイト文字列や、バイト配列として使用する。
wstring
wchar_t
型文字列。wchar_t
が16ビットの環境で、UTF-16の文字列として使用する。
u8string
char8_t
型文字列。UTF-8の文字列として使用する。
C++20
u16string
char16_t
型文字列。UTF-16の文字列として使用する。
C++11
u32string
char32_t
型文字列。UTF-32の文字列として使用する。
C++11
pmr::string
多相アロケータ を用いるstring
C++17
pmr::wstring
多相アロケータ を用いるwstring
C++17
pmr::u8string
多相アロケータ を用いるu8string
C++20
pmr::u16string
多相アロケータ を用いるu16string
C++17
pmr::u32string
多相アロケータ を用いるu32string
C++17
basic_string
文字列オブジェクトに含まれる各要素は、必ずしも1文字を表すわけではないことに注意が必要である。
このクラスが表すのは、文字型charT
の動的配列であり、文字の動的配列ではない。
したがって、文字列中に以下のようなものが含まれている場合、basic_string
クラスにおいては複数の要素と見なされる。
マルチバイト文字(charT
がchar
などの場合)
サロゲートペア
結合文字列
異体字切り換えシーケンス (IVS)
名前
説明
対応バージョン
begin
先頭の要素を指すイテレータを取得する
end
末尾の次を指すイテレータを取得する
cbegin
先頭の要素を指す読み取り専用イテレータを取得する
C++11
cend
末尾の次を指す読み取り専用イテレータを取得する
C++11
rbegin
末尾を指す逆イテレータを取得する
rend
先頭の前を指す逆イテレータを取得する
crbegin
末尾を指す読み取り専用逆イテレータを取得する
C++11
crend
先頭の前を指す読み取り専用逆イテレータを取得する
C++11
名前
説明
対応バージョン
npos
無効な位置を表す。find
やsubstr
などで使われる。static const size_type npos = -1;
C++23からconstexpr
名前
説明
対応バージョン
traits_type
文字特性型 traits
value_type
文字型 traits::char_type
allocator_type
アロケータ型 Allocator
size_type
要素数を表す符号なし整数型。 allocator_traits<Allocator>::size_type
difference_type
イテレータの差を表す符号付き整数型。 allocator_traits<Allocator>::difference_type
reference
参照型 value_type&
const_reference
const
参照型 const value&
pointer
ポインタ型 allocator_traits<Allocator>::pointer
const_pointer
const
ポインタ型 allocator_traits<Allocator>::const_pointer
iterator
イテレータ
const_iterator
読み取り専用イテレータ
reverse_iterator
逆順イテレータ reverse_iterator
<iterator>
const_reverse_iterator
読み取り専用逆イテレータ reverse_iterator
<const_iterator>
名前
説明
対応バージョン
swap
2つのbasic_string
オブジェクトを入れ替える
名前
説明
対応バージョン
erase
指定した値をもつ要素とその分の領域を、コンテナから削除する
C++20
erase_if
指定した条件に合致する要素とその分の領域を、コンテナから削除する
C++20
名前
説明
対応バージョン
s
basic_string
のリテラル
C++14
#include < iostream>
#include < cstdio>
#include < string>
int main ()
{
// C文字列からstringオブジェクトを構築
std::string s = " hello" ;
// 末尾に文字列を追加
s += " world" ;
// 部分文字列を取得(始点:0、始点からの文字数:5)
std::string hello = s.substr (0 , 5 );
// ostreamへの出力
std::cout << hello << std::endl;
// C文字列を取得し、const char*を要求するAPIに渡す
std::printf (" %s" , s.c_str ());
}
std::string[color ff0000]
s.substr[link basic_string/substr.md]
s.c_str()[link basic_string/c_str.md]
定数式内でbasic_stringを使用する (C++20)
#include < cassert>
#include < string>
constexpr bool f ()
{
std::string s = " Hello" ;
s += " World" ;
auto * p = s.data ();
assert (p);
return true ;
}
int main ()
{
static_assert (f ());
}
s.data()[link basic_string/data.md]