std::basic_string::append
提供: cppreference.com
< cpp | string | basic string
basic_string& append( size_type count, CharT ch ); |
(1) | |
basic_string& append( const basic_string& str ); |
(2) | |
(3) | ||
basic_string& append( const basic_string& str, size_type pos, |
(C++14以前) | |
basic_string& append( const basic_string& str, size_type pos, |
(C++14およびそれ以降) | |
basic_string& append( const CharT* s, size_type count ); |
(4) | |
basic_string& append( const CharT* s ); |
(5) | |
template< class InputIt > basic_string& append( InputIt first, InputIt last ); |
(6) | |
basic_string& append( std::initializer_list<CharT> ilist ); |
(7) | (C++11およびそれ以降) |
template < class T > basic_string& append( const T& t ); |
(8) | (C++17およびそれ以降) |
template < class T > basic_string& append( const T& t, size_type pos, |
(9) | (C++17およびそれ以降) |
追加の文字を文字列に追加します。
1) 文字
ch
のコピーを count
個追加します。2) 文字列
str
を追加します。3)
str
の部分文字列 [pos, pos+count)
を追加します。 要求された部分文字列が文字列の終端を超える場合、または count == npos の場合、追加される部分文字列は [pos, size())
になります。 pos > str.size() の場合は std::out_of_range が投げられます。4)
s
の指す文字列の最初の count
個の文字を追加します。 s
はNULL文字を含むことができます。5)
s
の指すNULL終端文字列を追加します。 文字列の長さは最初のNULL文字によって決定されます。6) 範囲
[first, last)
の文字を追加します。 InputIt
が整数型の場合、このオーバーロードはオーバーロード (1) と同じ効果を持ちます。7) 初期化子リスト
ilist
から文字を追加します。8) std::basic_string_view<CharT, Traits> sv = t; によって行われたかのように、
t
を文字列ビュー sv
に暗黙に変換し、 append(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 である場合にのみ、オーバーロード解決に参加します。9) 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 | - | 追加する文字を持つ初期化子リスト |
t | - | 追加する文字を持つ std::basic_string_view に変換可能なオブジェクト |
[編集] 戻り値
*this。
[編集] 計算量
標準の計算量の保証はありませんが、一般的な実装では std::vector::insert に似た動作をします。
[編集] 例外
何らかの理由で例外が投げられた場合、この関数は効果を持ちません (強い例外保証)。 (C++11およびそれ以降)
操作の結果が size() > max_size()
となる場合は std::length_error を投げます。
[編集] 欠陥報告
以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。
DR | 適用先 | 発行時の動作 | 正しい動作 |
---|---|---|---|
LWG 2946 | C++17 | string_view overload causes ambiguity in some cases
|
avoided by making it a template |
[編集] 例
Run this code
#include <string> #include <iostream> int main() { std::basic_string<char> str = "string"; const char* cptr = "C-string"; const char carr[] = "Two and one"; std::string output; // 1) Append a char 3 times. // Notice, this is the only overload accepting chars. output.append(3, '*'); std::cout << "1) " << output << "\n"; // 2) Append a whole string output.append(str); std::cout << "2) " << output << "\n"; // 3) Append part of a string (last 3 letters, in this case) output.append(str, 3, 3); std::cout << "3) " << output << "\n"; // 4) Append part of a C-string // Notice, because `append` returns *this, we can chain calls together output.append(1, ' ').append(carr, 4); std::cout << "4) " << output << "\n"; // 5) Append a whole C-string output.append(cptr); std::cout << "5) " << output << "\n"; // 6) Append range output.append(&carr[3], std::end(carr)); std::cout << "6) " << output << "\n"; // 7) Append initializer list output.append({ ' ', 'l', 'i', 's', 't' }); std::cout << "7) " << output << "\n"; }
出力:
1) *** 2) ***string 3) ***stringing 4) ***stringing Two 5) ***stringing Two C-string 6) ***stringing Two C-string and one 7) ***stringing Two C-string and one list
[編集] 関連項目
文字を末尾に追加します (パブリックメンバ関数) | |
2つの文字列を連結します (関数) | |
2つの文字列の文字を一定量連結します (関数) | |
ワイド文字列のコピーを別のワイド文字列に追加します (関数) | |
ワイド文字列から別のワイド文字列へワイド文字を一定量追加します (関数) |