The Wayback Machine - https://web.archive.org/web/20180415231857/http://ja.cppreference.com:80/w/cpp/string/basic_string/assign
名前空間
変種
操作

std::basic_string::assign

提供: cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
basic_string& assign( size_type count, CharT ch );
(1)
basic_string& assign(const basic_string& str );
(2)
(3)
basic_string& assign(const basic_string& str,

                      size_type pos,

                      size_type count );
(C++14以前)
basic_string& assign(const basic_string& str,

                      size_type pos,

                      size_type count = npos);
(C++14およびそれ以降)
basic_string& assign( basic_string&& str );
(4) (C++11およびそれ以降)
basic_string& assign(const CharT* s,
                      size_type count );
(5)
basic_string& assign(const CharT* s );
(6)
template<class InputIt >
basic_string& assign( InputIt first, InputIt last );
(7)
basic_string& assign(std::initializer_list<CharT> ilist );
(8) (C++11およびそれ以降)
template<class T >
basic_string& assign(const T& t );
(9) (C++17およびそれ以降)
template<class T >

basic_string& assign(const T& t,
                      size_type pos,

                      size_type count = npos);
(10) (C++17およびそれ以降)

文字列の内容を置き換えます。

1) 内容を文字 ch のコピー count 個で置き換えます。
2) 内容を str のコピーで置き換えます。
3) 内容を str の部分文字列 [pos, pos+count) で置き換えます。 要求された部分文字列が文字列の終端を超える場合、または count == npos の場合、結果の部分文字列は [pos, str.size()) になります。 pos > str.size() の場合は std::out_of_range が投げられます。
4) ムーブセマンティクスを用いて、内容を str の内容で置き換えます。 *this = std::move(str) と同等です。
5) 内容を s の指す文字列の最初の count 個の文字で置き換えます。 s にはNULL文字を含めることができます。
6) 内容を s の指すNULL終端文字列の内容で置き換えます。 文字列の長さは最初のNULL文字によって決定されます。
7) 内容を範囲 [first, last) の文字のコピーで置き換えます。 このオーバーロードは、 InputItInputIterator を満たさない場合、オーバーロード解決に参加しません。(C++11およびそれ以降)
8) 内容を初期化子リスト ilist の内容で置き換えます。
9)std::basic_string_view<CharT, Traits> sv = t; によって行われたかのように、 t を文字列ビュー sv に暗黙に変換し、 assign(sv.data(), sv.size()) によって行われたかのように、内容を sv の内容で置き換えます。 このオーバーロードは、std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>>true であり、 std::is_convertible_v<const T&, const CharT*>false である場合にのみ、オーバーロード解決に参加します。
10)std::basic_string_view<CharT, Traits> sv = t; によって行われたかのように、 t を文字列ビュー sv に暗黙に変換し、 内容を sv のサブビュー [pos, pos+count) の文字で置き換えます。 要求されたサブビューが sv の終端を超える場合、または count == npos の場合、結果のサブビューは [pos, sv.size()) になります。 pos > sv.size() の場合は std::out_of_range を投げます。 このオーバーロードは、std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>>true であり、 std::is_convertible_v<const T&, const CharT*>false である場合にのみ、オーバーロード解決に参加します。

目次

[編集]引数

count - 結果となる文字列のサイズ
pos - 取得する最初の文字のインデックス
ch - 文字列を初期化するための値
first, last - コピーする文字の範囲
str - 文字列を初期化するためのソースとして使用される文字列
s - 文字列を初期化するためのソースとして使用される文字列を指すポインタ
ilist - 文字列を初期化するための std::initializer_list
t - 文字列を初期化するための (std::basic_string_view に変換可能な) オブジェクト
型の要件
-
InputItInputIterator の要件を満たさなければなりません。

[編集]戻り値

*this

[編集]計算量

1)count に比例。
2)str のサイズに比例。
3)count に比例。
4) 一定。 alloc が与えられていて alloc != other.get_allocator() の場合は比例。
5)count に比例。
6)s のサイズに比例。
7)firstlast の距離に比例。
8)ilist のサイズに比例。

[編集]例外

何らかの理由で例外が投げられた場合、この関数は効果を持ちません (強い例外保証)。(C++11およびそれ以降)

操作の結果 size() > max_size() となる場合は std::length_error を投げます。

4)
noexcept 指定:  
noexcept
  
(C++11およびそれ以降)
(C++17以前)
4)
noexcept 指定:  
noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value
 ||std::allocator_traits<Allocator>::is_always_equal::value)
(C++17およびそれ以降)

[編集]欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
LWG 2063 C++11 non-normative note stated that swap is a valid implementation of move-assign corrected to require move assignment
LWG 2946 C++17 string_view overload causes ambiguity in some cases avoided by making it a template

[編集]

#include <iostream>#include <iterator>#include <string>   int main(){std::string s;// assign(size_type count, CharT ch) s.assign(4, '=');std::cout<< s <<'\n';// "===="   std::stringconst c("Exemplary");// assign(basic_string const& str) s.assign(c);std::cout<< c <<"=="<< s <<'\n';// "Exemplary == Exemplary"   // assign(basic_string const& str, size_type pos, size_type count) s.assign(c, 0, c.length()-1);std::cout<< s <<'\n';// "Exemplar";   // assign(basic_string&& str) s.assign(std::string("C++ by ")+"example");std::cout<< s <<'\n';// "C++ by example"   // assign(charT const* s, size_type count) s.assign("C-style string", 7);std::cout<< s <<'\n';// "C-style"   // assign(charT const* s) s.assign("C-style\0string");std::cout<< s <<'\n';// "C-style"   char mutable_c_str[]="C-style string";// assign(InputIt first, InputIt last) s.assign(std::begin(mutable_c_str), std::end(mutable_c_str)-1);std::cout<< s <<'\n';// "C-style string"   // assign(std::initializer_list<charT> ilist) s.assign({'C', '-', 's', 't', 'y', 'l', 'e'});std::cout<< s <<'\n';// "C-style"}

出力:

==== Exemplary==Exemplary Exemplar C++ by example C-style C-style C-style string C-style

[編集]関連項目

basic_string を構築します
(パブリックメンバ関数)[edit]
文字列に値を代入します
(パブリックメンバ関数)[edit]
close