最終更新日時:
が更新

履歴 編集

class template
<string>

std::basic_string

namespace std {
  template <class charT,
            class traits = char_traits<charT>,
            class Allocator = allocator<charT> >
  class basic_string;

  using string    = basic_string<char>;
  using u16string = basic_string<char16_t>;  // C++11から
  using u32string = basic_string<char32_t>;  // C++11から
  using wstring   = basic_string<wchar_t>;
}

概要

basic_stringクラスは、あらゆる文字型を使用できる文字列クラスである。
テンプレートパラメータとして文字型を受け取るようになっており、使用を容易にするため、以下のパラメータ設定済みエイリアスが定義されている。

エイリアス 説明 対応バージョン
string char型文字列。ASCII、UTF-8等のマルチバイト文字列や、バイト配列として使用する。
wstring wchar_t型文字列。wchar_tが16ビットの環境で、UTF-16の文字列として使用する。
u16string char16_t型文字列。UTF-16の文字列として使用する。 C++11
u32string char32_t型文字列。UTF-32の文字列として使用する。 C++11

basic_string文字列オブジェクトに含まれる各要素は、必ずしも1文字を表すわけではないことに注意が必要である。
このクラスが表すのは、文字型charTの動的配列であり、文字の動的配列ではない。
したがって、文字列中に以下のようなものが含まれている場合、basic_stringクラスにおいては複数の要素と見なされる。

  • マルチバイト文字(charTcharなどの場合)
  • サロゲートペア
  • 結合文字列
  • 異体字切り換えシーケンス (IVS)

メンバ関数

構築・破棄

名前 説明 対応バージョン
(constructor) コンストラクタ
(destructor) デストラクタ
operator= 代入演算子

イテレータ

名前 説明 対応バージョン
begin 先頭の要素を指すイテレータを取得する
end 末尾の次を指すイテレータを取得する
cbegin 先頭の要素を指す読み取り専用イテレータを取得する C++11
cend 末尾の次を指す読み取り専用イテレータを取得する C++11
rbegin 末尾を指す逆イテレータを取得する
rend 先頭の前を指す逆イテレータを取得する
crbegin 末尾を指す読み取り専用逆イテレータを取得する C++11
crend 先頭の前を指す読み取り専用逆イテレータを取得する C++11

領域

名前 説明 対応バージョン
size 文字列の長さを取得する
length 文字列の長さを取得する
max_size 格納可能な最大の文字列長を取得する
resize 文字列の長さを変更する
capacity メモリを再確保せずに格納できる最大の要素数を取得する
reserve capacityを変更する
shrink_to_fit capacitysizeまで縮小する C++11
clear 文字列をクリアする
empty 文字列が空かどうかを判定する

要素アクセス

名前 説明 対応バージョン
operator[] 任意の位置の要素を取得する
at 任意の位置の要素を取得する
front 先頭要素を取得する C++11
back 末尾要素を取得する C++11

文字列の変更

名前 説明 対応バージョン
operator+= 文字/文字列を追加する
append 文字/文字列を追加する
push_back 末尾に要素を追加する
assign 文字列の再代入
insert 文字/文字列を挿入する
erase 要素を削除する
pop_back 末尾の1要素を削除する C++11
replace 文字列の一部を置換する
swap 他のbasic_stringオブジェクトとデータを入れ替える

文字列の操作

名前 説明 対応バージョン
c_str C言語の文字列表現を取得する
data 文字配列表現を取得する
get_allocator アロケータを取得する
copy 他の文字列にコピーする
find 指定文字列を検索する
rfind 最後に現れる指定文字列を検索する
find_first_of 最初に現れる指定文字を検索する
find_last_of 最後に現れる指定文字を検索する
find_first_not_of 先頭から、指定文字が見つからない位置を検索する
find_last_nof_of 末尾から、指定文字が見つからない位置を検索する
substr 部分文字列を取得する
compare 他の文字列との比較を行う

メンバ定数

名前 説明 対応バージョン
npos 無効な位置を表す。findsubstrなどで使われる。
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>

非メンバ関数

名前 説明 対応バージョン
operator+ 文字列の連結
operator== 等値比較
operator!= 非等値比較
operator< 左辺が右辺より小さいかの判定を行う
operator<= 左辺が右辺以下かの判定を行う
operator> 左辺が右辺より大きいかの判定を行う
operator>= 左辺が右辺以上かの判定を行う
operator<< ストリームへの出力
operator>> ストリームからの入力
swap 2つのbasic_stringオブジェクトを入れ替える
getline 入力ストリームから1行読み込む

リテラル

名前 説明 対応バージョン
s basic_stringのリテラル C++14

推論補助

名前 説明 対応バージョン
(deduction_guide) クラステンプレートの推論補助 C++17

#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());
}

出力

hello
hello world

参照