最終更新日時(UTC):
が更新

履歴 編集

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 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>;
  }
}

概要

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クラスにおいては複数の要素と見なされる。

  • マルチバイト文字(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 文字配列表現を取得する
operator basic_string_view std::basic_string_view型に変換する C++17
get_allocator アロケータを取得する
copy 他の文字列にコピーする
find 指定文字列を検索する
rfind 最後に現れる指定文字列を検索する
find_first_of 最初に現れる指定文字を検索する
find_last_of 最後に現れる指定文字を検索する
find_first_not_of 先頭から、指定文字が見つからない位置を検索する
find_last_nof_of 末尾から、指定文字が見つからない位置を検索する
substr 部分文字列を取得する
compare 他の文字列との比較を行う
starts_with 指定の文字列で始まるかを判定する C++20
ends_with 指定の文字列で終わるかを判定する C++20
contains 指定の文字・文字列が含まれているかを判定する C++23

メンバ定数

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

非メンバ関数

文字列連結

名前 説明 対応バージョン
operator+ 文字列の連結

比較演算子

名前 説明 対応バージョン
operator== 等値比較
operator!= 非等値比較
operator<=> 三方比較 C++20
operator< 左辺が右辺より小さいかの判定を行う
operator<= 左辺が右辺以下かの判定を行う
operator> 左辺が右辺より大きいかの判定を行う
operator>= 左辺が右辺以上かの判定を行う

入出力

名前 説明 対応バージョン
operator<< ストリームへの出力
operator>> ストリームからの入力
getline 入力ストリームから1行読み込む

入れ替え

名前 説明 対応バージョン
swap 2つのbasic_stringオブジェクトを入れ替える

要素削除

名前 説明 対応バージョン
erase 指定した値をもつ要素とその分の領域を、コンテナから削除する C++20
erase_if 指定した条件に合致する要素とその分の領域を、コンテナから削除する C++20

リテラル

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

推論補助

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

基本的な使い方 (C++03)

#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

定数式内で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());
}

参照