名前空間
変種
操作

std::basic_string_view

From cppreference.com
< cpp‎ | string
 
 
文字列ライブラリ
クラス
basic_string_view
(C++17)
 
 
ヘッダ <string_view> で定義
template<

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

> class basic_string_view;
(C++17以降)

クラステンプレートbasic_string_viewは、先頭要素が位置0にある、CharTの定数で連続したシーケンスを参照できるオブジェクトを記述します。

basic_string_view strに対して、範囲[str.data()str.data() + str.size())内のポインタを無効にする操作が行われた場合、strの要素へのポインタ、イテレータ、および参照は無効になります。

std::basic_string_viewの全ての特殊化は、TriviallyCopyable型です。

(C++23から)

典型的な実装では、定数CharTへのポインタとサイズという2つのメンバのみを保持します。

一般的な文字型のためにいくつかの typedef が提供されています

ヘッダ <string_view> で定義
定義
std::string_view (C++17) std::basic_string_view<char>
std::wstring_view (C++17) std::basic_string_view<wchar_t>
std::u8string_view (C++20) std::basic_string_view<char8_t>
std::u16string_view (C++17) std::basic_string_view<char16_t>
std::u32string_view (C++17) std::basic_string_view<char32_t>

目次

[編集] テンプレートパラメータ

CharT - 文字型
Traits - 文字型に対する操作を指定するCharTraitsクラス。std::basic_stringと同様に、Traits::char_typeCharTと同じ型でなければならず、そうでなければプログラムは不適格となります。

[編集] メンバ型

ネストされた型 定義
traits_type Traits
value_type CharT
pointer CharT*
const_pointer const CharT*
reference CharT&
const_reference const CharT&
const_iterator 実装定義の定数LegacyRandomAccessIterator
かつLegacyContiguousIterator (C++20まで)
ConstexprIterator、およびcontiguous_iterator (C++20以降)

そのvalue_typeCharT

iterator const_iterator
const_reverse_iterator std::reverse_iterator<const_iterator>
reverse_iterator const_reverse_iterator
size_type std::size_t
difference_type std::ptrdiff_t

注:string viewは定数文字シーケンスへのビューであるため、iteratorconst_iteratorは同じ型です。

コンテナのイテレータ型に対する全ての要件は、basic_string_viewiteratorおよびconst_iterator型にも同様に適用されます。

[編集] メンバ関数

コンストラクタと代入
basic_string_viewを構築する
(public member function) [編集]
ビューを代入する
(public member function) [編集]
イテレータ
先頭へのイテレータを返す
(public member function) [編集]
末尾へのイテレータを返す
(public member function) [編集]
先頭への逆イテレータを返す
(public member function) [編集]
末尾への逆イテレータを返す
(public member function) [編集]
要素アクセス
指定された文字にアクセスする
(public member function) [編集]
境界チェック付きで指定された文字にアクセスする
(public member function) [編集]
最初の文字にアクセスする
(public member function) [編集]
最後の文字にアクセスする
(public member function) [編集]
ビューの最初の文字へのポインタを返す
(public member function) [編集]
容量
文字数を返す
(public member function) [編集]
最大文字数を返す
(public member function) [編集]
ビューが空かどうかをチェックする
(public member function) [編集]
変更
ビューの開始位置を前方に移動して縮小する
(public member function) [編集]
ビューの終了位置を後方に移動して縮小する
(public member function) [編集]
内容を交換する
(public member function) [編集]
操作
文字をコピーする
(public member function) [編集]
部分文字列を返す
(public member function) [編集]
2つのビューを比較する
(public member function) [編集]
string viewが指定されたプレフィックスで始まるかチェックする
(public member function) [編集]
(C++20)
string viewが指定されたサフィックスで終わるかチェックする
(public member function) [編集]
(C++23)
string viewが指定された部分文字列または文字を含むかチェックする
(public member function) [編集]
ビュー内の文字を検索する
(public member function) [編集]
部分文字列が最後に現れる位置を見つける
(public member function) [編集]
文字が最初に現れる位置を見つける
(public member function) [編集]
文字が最後に現れる位置を見つける
(public member function) [編集]
文字が最初に現れない位置を見つける
(public member function) [編集]
文字が最後に現れない位置を見つける
(public member function) [編集]

定数

[static]
特別な値。正確な意味は文脈に依存する
(public static member constant) [編集]

[編集] 非メンバ関数

(C++17)(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20)
2つのstring viewを辞書順で比較する
(function template) [編集]
入出力
string viewのストリーム出力を行う
(function template) [編集]

[編集] リテラル

インライン名前空間std::literals::string_view_literalsで定義
文字配列リテラルのstring viewを作成する
(function) [編集]

[編集] ヘルパークラス

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

[編集] ヘルパーテンプレート

template< class CharT, class Traits >

inline constexpr bool

    ranges::enable_borrowed_range<std::basic_string_view<CharT, Traits>> = true;
(C++20以降)

このranges::enable_borrowed_rangeの特殊化により、basic_string_viewborrowed_rangeを満たします。

template< class CharT, class Traits >

inline constexpr bool

    ranges::enable_view<std::basic_string_view<CharT, Traits>> = true;
(C++20以降)

このranges::enable_viewの特殊化により、basic_string_viewviewを満たします。

推論補助

(C++20以降)

[編集] ノート

std::string_viewが、指し示している文字配列より長生きしないようにするのはプログラマの責任です。

std::string_view good{"a string literal"};
    // "Good" case: `good` points to a static array.
    // String literals reside in persistent data storage.
 
std::string_view bad{"a temporary string"s};
    // "Bad" case: `bad` holds a dangling pointer since the std::string temporary,
    // created by std::operator""s, will be destroyed at the end of the statement.

std::basic_string_viewの特殊化は、C++23で正式な要件が導入される前から、既存の全ての実装において既にtrivially copyableな型です。

機能テストマクロ 規格 機能
__cpp_lib_string_view 201606L (C++17) std::string_view
201803L (C++20) ConstexprIterator
__cpp_lib_string_contains 202011L (C++23) contains

[編集]

#include <iostream>
#include <string_view>
 
int main()
{
    constexpr std::string_view unicode[]{"▀▄─", "▄▀─", "▀─▄", "▄─▀"};
 
    for (int y{}, p{}; y != 6; ++y, p = ((p + 1) % 4))
    {
        for (int x{}; x != 16; ++x)
            std::cout << unicode[p];
        std::cout << '\n';
    }
}

出力

▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 3203 C++17 のメンバ関数から返された
ポインタ、イテレータ、および参照のみが
basic_string_view無効になる可能性がある
の要素への
全てのポインタ、イテレータ、および参照が
basic_string_view無効になる可能性がある

[編集] 関連項目

文字のシーケンスを格納し操作する
(クラステンプレート) [編集]
2つの文字列、文字列とchar、または文字列とstring_viewを連結する
(function template) [編集]
(C++20)
連続したオブジェクトのシーケンスに対する所有権を持たないビュー
(class template) [編集]
リスト初期化で作成された一時配列を参照する
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)