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

履歴 編集

class template
<string_view>

std::basic_string_view(C++17)

namespace std {
  template <class CharT, class Traits = char_traits<CharT>>
  class basic_string_view;

  using string_view = basic_string_view<char>;
  using u16string_view = basic_string_view<char16_t>;
  using u32string_view = basic_string_view<char32_t>;
  using wstring_view = basic_string_view<wchar_t>;
}

概要

std::basic_string_viewは、文字列の所有権を保持せず、文字列のコピーを持つのではなく参照をして、参照先の文字列を加工して扱うクラスである。

文字配列型である文字列リテラルに対して、std::basic_stringクラスが持つような便利なメンバ関数群を使用できる。文字列リテラルは静的記憶域に保存されるため、文字列リテラルをこのクラスのオブジェクトに参照させて、そのオブジェクトを持ち回ったとしても参照先の文字列リテラルの寿命が尽きるような問題は発生しない。

string_view sv = "Hello World"; // この式の評価がおわったあとも、文字列リテラル "Hello World" の寿命は尽きない
string_view hello = sv.substr(0, 5); // 先頭5文字を抽出する

このクラスの実装としては、文字配列の参照する先頭文字へのポインタと、文字数の2つをメンバ変数として持つ。これらの変数を変動させることによって、部分文字列の抽出や、限定された範囲内での検索といったことを実現する。

メンバ関数

構築・破棄

名前 説明 対応バージョン
(constructor) コンストラクタ C++17
~basic_string_view() = default; デストラクタ C++17
basic_string_view& operator=(const basic_string_view&) = default;
basic_string_view& operator=(basic_string_view&&) = default;
代入演算子 C++17

イテレータ

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

領域

名前 説明 対応バージョン
size 文字列の長さを取得する C++17
length 文字列の長さを取得する C++17
max_size 参照可能な最大の文字列長を取得する C++17
empty 文字列が空かどうかを判定する C++17

要素アクセス

名前 説明 対応バージョン
operator[] 任意の位置の文字を取得する C++17
at 任意の位置の文字を取得する C++17
front 先頭文字を取得する C++17
back 末尾文字を取得する C++17
data 文字配列表現を取得する C++17

文字列の変更

名前 説明 対応バージョン
remove_prefix 先頭のN文字を削除する C++17
remove_suffix 末尾のN文字を削除する C++17
swap 他のbasic_string_viewオブジェクトとデータを入れ替える C++17

文字列の操作

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

メンバ定数

名前 説明 対応バージョン
npos 無効な位置を表す。findsubstrなどで使われる。
static const size_type npos = -1;
C++17

メンバ型

名前 説明 対応バージョン
traits_type 文字特性型 Traits C++17
value_type 文字型 CharT C++17
pointer ポインタ型 value_type* C++17
const_pointer constポインタ型 const value_type* C++17
reference 参照型 value_type& C++17
const_reference const参照型 const value& C++17
const_iterator 読み取り専用イテレータ。実装定義。
要素の型はvalue_type
ランダムアクセスイテレータと連続イテレータの要件を満たす
C++17
iterator イテレータ const_iterator C++17
const_reverse_iterator 読み取り専用逆イテレータ reverse_iterator<const_iterator> C++17
reverse_iterator 逆順イテレータ const_reverse_iterator C++17
size_type 要素数を表す符号なし整数型 size_t C++17
difference_type イテレータの差を表す符号付き整数型 ptrdiff_t C++17

非メンバ関数

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

リテラル

名前 説明 対応バージョン
sv basic_string_viewのリテラル C++17

ハッシュサポート

名前 説明 対応バージョン
template <class T> struct hash; hashクラスの先行宣言 C++17
template <> struct hash<string_view>; hashクラスのstring_viewに対する特殊化 C++17
template <> struct hash<wstring_view>; hashクラスのwstring_viewに対する特殊化 C++17
template <> struct hash<u16string_view>; hashクラスのu16string_viewに対する特殊化 C++17
template <> struct hash<u32string_view>; hashクラスのu32string_viewに対する特殊化 C++17

#include <iostream>
#include <string_view>

int main()
{
  // 文字列リテラルから部分文字列を取得する。
  // その際、メモリアロケートは発生しない
  std::cout << std::string_view("Hello World").substr(0, 5) << std::endl;

  // 文字列リテラル内から特定の文字列を検索する。
  // この例でも、メモリアロケートや文字列オブジェクトのコピーなどは発生しない
  std::string_view sv = "Hello World";
  std::size_t pos = sv.find("rl");
  if (pos != std::string_view::npos) {
    std::cout << "found" << std::endl;
  }
}

出力

Hello
found

バージョン

言語

  • C++17

処理系

参照