- 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; |
|
名前 |
説明 |
対応バージョン |
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]