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

履歴 編集

function
<string>

std::basic_string::assign

basic_string& assign(const basic_string& str);                  // (1) C++03
constexpr basic_string& assign(const basic_string& str);        // (1) C++20

basic_string& assign(basic_string&& str) noexcept;              // (2) C++11
constexpr basic_string& assign(basic_string&& str) noexcept;    // (2) C++20

basic_string&
  assign(const basic_string& str,
         size_type pos,
         size_type n);             // (3) C++03
basic_string&
  assign(const basic_string& str,
         size_type pos,
         size_type n = npos);      // (3) C++14
constexpr basic_string&
  assign(const basic_string& str,
         size_type pos,
         size_type n = npos);      // (3) C++20

basic_string& assign(const charT* s, size_type n);              // (4) C++03
constexpr basic_string& assign(const charT* s, size_type n);    // (4) C++20

basic_string& assign(const charT* s);                           // (5) C++03
constexpr basic_string& assign(const charT* s);                 // (5) C++20

basic_string& assign(size_type n, charT c);                     // (6) C++03
constexpr basic_string& assign(size_type n, charT c);           // (6) C++20

template <class InputIterator>
basic_string&
  assign(InputIterator first,
         InputIterator last);  // (7) C++03
template <class InputIterator>
constexpr basic_string&
  assign(InputIterator first,
         InputIterator last);  // (7) C++20

basic_string& assign(initializer_list<charT> il);           // (8) C++11
constexpr basic_string& assign(initializer_list<charT> il); // (8) C++20

// string_viewを引数に取るオーバーロード
template<class T>
basic_string& assign(const T& t);           // (9) C++17
template<class T>
constexpr basic_string& assign(const T& t); // (9) C++20

template<class T>
basic_string&
  assign(const T& t,
         size_type pos,
         size_type n = npos);   // (10) C++17
template<class T>
constexpr basic_string&
  assign(const T& t,
         size_type pos,
         size_type n = npos);   // (10) C++20

概要

文字列の再代入を行う。

この関数は、アロケータを除き、basic_stringクラスのコンストラクタと同様のパラメータを受け取り、再代入を行う。代入演算子が一つのパラメータしか扱えないため、複数パラメータによる代入として使用する。

テンプレートパラメータ制約

要件

  • (3) : pos <= str.size()であること。
  • (4) : s は少なくとも n の長さを持つ charT 型の配列を指していること。
  • (5) : s は少なくとも traits_type::length(s) + 1 の長さを持つ charT 型の配列を指していること。

効果

  • (1) : コピー代入。strオブジェクトと同じ文字列を構築する。
    • assign(str, 0, npos)と等価。
  • (2) : ムーブ代入。strオブジェクトが指すデータの所有権を自身に移動する。str未規定の値になる。
  • (3) : strオブジェクトの部分文字列のコピーから構築する。strオブジェクトのpos番目からn文字の部分文字列がコピーされる。
    • 文字列の長さ rlen は、nstr.size() - pos の小さい方である。 n == npos の場合は、 str.size() - pos が使用される。
    • assign(str.data() + pos, rlen)を呼び出す。
  • (4) : 文字配列sの先頭n文字からなる部分文字列のコピーから構築する。
  • (5) : 文字配列sのコピーから構築する。
  • (6) : 文字cn回繰り返した文字列からなるbasic_stringオブジェクトを構築する。
    • assign(basic_string(n, c))と等価。
  • (7) : 文字列のイテレータ範囲[begin, end)からbasic_stringオブジェクトを構築する。
    • assign(basic_string(first, last))と等価。
  • (8) : 文字の初期化子リストからbasic_stringオブジェクトを構築する。
    • assign(il.begin(), il.end())を呼び出す。
  • (9) : basic_string_view<charT, traits>に変換可能なtが参照する範囲をコピーして、basic_stringオブジェクトを構築する。
    以下と等価。

    basic_string_view<charT, traits> sv = t;
    return assign(sv.data(), sv.size());
    

  • (10) : basic_string_view<charT, traits>に変換可能なtが参照する文字列を範囲指定でコピーして、basic_stringオブジェクトを構築する。
    以下と等価。

    basic_string_view<charT, traits> sv = t;
    return assign(sv.substr(pos, n));
    

戻り値

*this

例外

#include <iostream>
#include <string>

int main()
{
  // (1) コピー代入
  std::string s1;
  std::string s1_tmp = "hello";
  s1.assign(s1_tmp);
  std::cout << "s1 : " << s1 << std::endl;

  // (2) ムーブ代入
  std::string s2;
  s2.assign(std::string("hello"));
  std::cout << "s2 : " << s2 << std::endl;

  // (3) 部分文字列のコピーを代入
  // s2文字列オブジェクトの1番目の文字から3文字
  std::string s3;
  s3.assign(s2, 1, 3);
  std::cout << "s3 : " << s3 << std::endl;

  // (4) 文字配列の先頭N文字を代入
  std::string s4;
  s4.assign("hello", 3);
  std::cout << "s4 : " << s4 << std::endl;

  // (5) 文字配列を代入
  std::string s5;
  s5.assign("hello");
  std::cout << "s5 : " << s5 << std::endl;

  // (6) 文字をN回繰り返して代入
  std::string s6;
  s6.assign(3, 'a');
  std::cout << "s6 : " << s6 << std::endl;

  // (7) 文字列の範囲を代入
  std::string s7;
  s7.assign(s1.begin(), s1.end());
  std::cout << "s7 : " << s7 << std::endl;

  // (8) 文字の初期化子リストを代入
  std::string s8;
  s8.assign({'h', 'e', 'l', 'l', 'o'});
  std::cout << "s8 : " << s8 << std::endl;

  // (9) std::basic_string_viewオブジェクトを代入
  std::string s9;
  s9.assign(std::string_view{"Hello World"}.substr(0, 5));
  std::cout << "s9 : " << s9 << std::endl;

  // (10) std::basic_string_viewオブジェクトを範囲指定して代入
  std::string s10;
  s10.assign(std::string_view{"Hello World"}, 0, 5);
  std::cout << "s10 : " << s10 << std::endl;
}

出力

s1 : hello
s2 : hello
s3 : ell
s4 : hel
s5 : hello
s6 : aaa
s7 : hello
s8 : hello
s9 : Hello
s10 : Hello

参照