Namespaces
Variants

std:: basic_string

From cppreference.net
std::basic_string
ヘッダーで定義 <string>
template <

class CharT,
class Traits = std:: char_traits < CharT > ,
class Allocator = std:: allocator < CharT >

> class basic_string ;
(1)
namespace pmr {

template <
class CharT,
class Traits = std:: char_traits < CharT >
> using basic_string =
std :: basic_string < CharT, Traits, std:: pmr :: polymorphic_allocator < CharT >> ;

}
(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 ] へのポインタは、 配列の先頭要素を指すポインタを期待する関数 (C++11以前) ナル終端配列の先頭要素を指すポインタを期待する関数 (C++11以降) に渡すことができます。

std::basic_string は、 AllocatorAwareContainer の要件を満たします (ただし、要素の構築/破棄にはカスタマイズされた construct / destroy は使用されません)。 SequenceContainer および ContiguousContainer (C++17以降) の要件も満たします。

Traits::char_type Allocator::value_type のいずれかが CharT と異なる場合、プログラムは不適格です。

std::basic_stringのすべてのメンバー関数は std::basic_string constexpr です:定数式の評価において std::basic_string オブジェクトを作成および使用することが可能です。

ただし、 std::basic_string オブジェクト自体は一般的に constexpr にはできません。なぜなら、動的に割り当てられたストレージは同じ定数式の評価内で解放されなければならないためです。

(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 - 文字型に対する操作を指定する特性クラス
Allocator - Allocator 内部ストレージの割り当てに使用されるアロケータ型

ネストされた型

定義
traits_type Traits
value_type CharT
allocator_type Allocator
size_type
Allocator::size_type (C++11以前)
std:: allocator_traits < Allocator > :: size_type (C++11以降)
difference_type
Allocator :: difference_type (C++11以前)
std:: allocator_traits < Allocator > :: difference_type (C++11以降)
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(C++11以前)

std:: allocator_traits < Allocator > :: pointer

(C++11以降)
const_pointer

Allocator::const_pointer

(C++11以前)

std:: allocator_traits < Allocator > :: const_pointer

(C++11以降)
iterator

LegacyRandomAccessIterator および LegacyContiguousIterator value_type を指すもの

(C++20以前)

LegacyRandomAccessIterator contiguous_iterator 、および ConstexprIterator value_type を指すもの

(C++20以降)
const_iterator

LegacyRandomAccessIterator および LegacyContiguousIterator const value_type を指すもの

(C++20以前)

LegacyRandomAccessIterator contiguous_iterator 、および ConstexprIterator const value_type を指すもの

(C++20以降)
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 member function)
文字列に値を代入する
(公開メンバ関数)
文字列に文字を割り当てる
(公開メンバ関数)
文字列に文字の範囲を割り当てる
(公開メンバ関数)
関連付けられたアロケータを返す
(公開メンバ関数)
要素アクセス
境界チェック付きで指定された文字にアクセスする
(公開メンバ関数)
指定された文字にアクセスする
(public member function)
( DR* )
最初の文字にアクセスする
(公開メンバ関数)
( DR* )
最後の文字にアクセスする
(公開メンバ関数)
文字列の最初の文字へのポインタを返す
(公開メンバ関数)
文字列の変更不可能な標準C文字配列バージョンを返す
(公開メンバ関数)
文字列全体に対する変更不可能な basic_string_view を返す
(公開メンバ関数)
イテレータ
先頭へのイテレータを返す
(公開メンバ関数)
(C++11)
終端へのイテレータを返す
(公開メンバ関数)
先頭への逆方向イテレータを返す
(公開メンバ関数)
(C++11)
末尾への逆方向イテレータを返す
(公開メンバ関数)
容量
文字列が空かどうかをチェックする
(public member function)
文字数を返す
(公開メンバー関数)
最大文字数を返す
(公開メンバ関数)
ストレージを予約
(公開メンバ関数)
現在割り当てられているストレージに保持可能な文字数を返す
(公開メンバ関数)
未使用のメモリを解放してメモリ使用量を削減します
(public member function)
修飾子
内容をクリアする
(公開メンバ関数)
文字列を挿入
(公開メンバ関数)
文字の範囲を挿入する
(公開メンバ関数)
文字を削除する
(公開メンバ関数)
末尾に文字を追加する
(公開メンバ関数)
( DR* )
最後の文字を削除する
(public member function)
末尾に文字を追加する
(公開メンバ関数)
文字の範囲を末尾に追加する
(公開メンバ関数)
末尾に文字を追加する
(公開メンバ関数)
文字列の指定された部分を置換する
(公開メンバ関数)
文字列の指定された部分を文字の範囲で置き換える
(公開メンバ関数)
文字列をコピー
(公開メンバ関数)
格納されている文字数を変更する
(公開メンバ関数)
格納されている文字数を変更し、ユーザー提供の操作を通じて不定内容を上書きする可能性がある
(公開メンバー関数)
内容を交換する
(公開メンバ関数)
検索
指定された部分文字列の最初の出現を検索します
(public member function)
部分文字列の最後の出現位置を検索
(公開メンバ関数)
文字の最初の出現を検索
(公開メンバ関数)
文字が存在しない最初の位置を検索
(公開メンバ関数)
文字の最後の出現を検索
(公開メンバー関数)
文字の不在を最後から検索
(公開メンバー関数)
演算
2つの文字列を比較する
(公開メンバ関数)
文字列が指定された接頭辞で始まるかどうかをチェックする
(public member function)
(C++20)
文字列が指定された接尾辞で終わるかどうかをチェックします
(公開メンバ関数)
(C++23)
文字列が指定された部分文字列または文字を含むかどうかをチェックする
(公開メンバ関数)
部分文字列を返す
(公開メンバ関数)

非メンバー関数

2つの文字列、文字列と char 、または文字列と string_view を連結する
(関数テンプレート)
(C++20で削除) (C++20で削除) (C++20で削除) (C++20で削除) (C++20で削除) (C++20)
2つの文字列を辞書順で比較する
(関数テンプレート)
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
文字配列リテラルを basic_string に変換する
(関数)

ヘルパークラス

文字列のハッシュサポート
(クラステンプレートの特殊化)

推論ガイド (C++17以降)

イテレータの無効化

basic_string の要素を参照する参照、ポインタ、およびイテレータは、 basic_string への非const参照を引数に取る標準ライブラリ関数(例: std::getline std::swap または operator>> )によって、および非constメンバ関数の呼び出しによって無効化される可能性があります。ただし、 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 と異なる場合、動作は未定義
この場合、プログラムは
不適格
  1. Traits::char_type のケースは P1148R0 で修正されました。

関連項目

読み取り専用文字列ビュー
(クラステンプレート)

外部リンク

C++文字列処理