名前空間
変種
操作

std::basic_string<CharT,Traits,Allocator>::append

From cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
basic_string& append( size_type count, CharT ch );
(1) (C++20 以降 constexpr)
basic_string& append( const CharT* s, size_type count );
(2) (C++20 以降 constexpr)
basic_string& append( const CharT* s );
(3) (C++20 以降 constexpr)
template< class SV >
basic_string& append( const SV& t );
(4) (C++17以降)
(C++20 以降 constexpr)
template< class SV >

basic_string& append( const SV& t, size_type pos,

                      size_type count = npos );
(5) (C++17以降)
(C++20 以降 constexpr)
basic_string& append( const basic_string& str );
(6) (C++20 以降 constexpr)
(7)
basic_string& append( const basic_string& str,
                      size_type pos, size_type count );
(C++14まで)
basic_string& append( const basic_string& str,
                      size_type pos, size_type count = npos );
(C++14以降)
(C++20 以降 constexpr)
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
(8) (C++20 以降 constexpr)
basic_string& append( std::initializer_list<CharT> ilist );
(9) (C++11以降)
(C++20 以降 constexpr)

文字列の末尾に、追加の文字を連結します。

1) 文字 chcount 回繰り返して連結します。
2) 文字列 [ss + count) の範囲の文字を連結します。
範囲[ss + count)有効な範囲でない場合、動作は未定義です。
3) return append(s, Traits::length(s)); と同等です。
4,5) 文字列ビュー t から構築された文字列ビュー sv の文字を連結します。
  • t のみが提供されている場合、 sv のすべての文字が連結されます。
  • pos も提供されている場合
    • countnpos の場合、 svpos から始まるすべての文字が連結されます。
    • それ以外の場合、 svpos から始まる std::min(count, sv.size() - pos) 個の文字が連結されます。
これらのオーバーロードは、以下のすべての条件が満たされた場合にのみオーバーロード解決に参加する。
4) std::basic_string_view<CharT, Traits> sv = t;
return append(sv.data(), sv.size());
と同等です。
5) std::basic_string_view<CharT, Traits> sv = t;
return append(sv.substr(pos, count));
と同等です。
6,7) 他の文字列 str の文字を連結します。
  • str のみが提供されている場合、そのすべての文字が連結されます。
  • pos も提供されている場合
    • countnpos の場合、 strpos から始まるすべての文字が連結されます。
    • それ以外の場合、 strpos から始まる std::min(count, str.size() - pos) 個の文字が連結されます。
6) return append(str.data(), str.size()); と同等です。
7) return append(std::basic_string_view<CharT, Traits>
                  (str).substr(pos, count));
と同等です。
(C++20以降)
8) return append(basic_string(first, last, get_allocator())); と同等です。

このオーバーロードは、InputIt が整数型である場合、オーバーロード (1) と同じ効果を持ちます。

(C++11まで)

このオーバーロードは、 InputItLegacyInputIterator の要件を満たす場合にのみ、オーバーロード解決に参加します。

(C++11以降)
9) return append(ilist.begin(), ilist.size()); と同等です。

目次

[編集] パラメータ

count - 追加する文字数
文字 - 追加する文字の値
s - 追加する文字列へのポインタ
t - 追加する文字を含む、 std::basic_string_view に変換可能なオブジェクト
pos - 追加する最初の文字のインデックス
str - 追加する文字列
first, last - 追加する文字の範囲
ilist - 追加する文字を含む初期化リスト

[編集] 戻り値

*this

[編集] 計算量

標準的な計算量の保証はありません。典型的な実装は、 std::vector::insert() と同様の動作をします。

[編集] 例外

操作によりsize()max_size()を超える場合、std::length_errorを送出します。

5) pos > sv.size()true の場合、 std::out_of_range をスローします。
7) pos > str.size()true の場合、 std::out_of_range をスローします。

何らかの理由で例外がスローされた場合、この関数は効果がありません(強力な例外安全保証)。

[編集]

#include <cassert>
#include <string>
 
int main()
{
    std::string str = "std::string";
    const char* cptr = "C-string";
    const char carr[] = "range";
 
    std::string result;
 
    // 1) Append a char 3 times.
    // Note: This is the only overload accepting “CharT”s.
    result.append(3, '*');
    assert(result == "***");
 
    // 2) Append a fixed-length C-string
    result.append(cptr, 5);
    assert(result == "***C-str");
 
    // 3) Append a null-terminated C-string
    // Note: Because “append” returns *this, we can chain calls together.
    result.append(1, ' ').append(cptr);
    assert(result == "***C-str C-string");
 
    // 6) Append a whole string
    result.append(1, ' ').append(str);
    assert(result == "***C-str C-string std::string");
 
    // 7) Append part of a string
    result.append(str, 3, 2);
    assert(result == "***C-str C-string std::string::");
 
    // 8) Append range
    result.append(&carr[2], &carr[3]);
    assert(result == "***C-str C-string std::string::n");
 
    // 9) Append initializer list
    result.append({'p', 'o', 's'});
    assert(result == "***C-str C-string std::string::npos");
}

[編集] 不具合報告

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

DR 適用対象 公開された動作 正しい動作
LWG 847 C++98 例外安全性保証がなかった 強力な例外安全性保証を追加
LWG 2250 C++98 オーバーロード (7) の動作は
pos > str.size()true の場合、未定義でした。
この場合、常に例外をスローします。
LWG 2788 C++98 オーバーロード (8) はデフォルト構築された
アロケータを使用して一時文字列を構築していました。
アロケータを取得します。
get_allocator() から
LWG 2946 C++17 オーバーロード (4) は、一部のケースで曖昧さを引き起こします。 テンプレートにすることで回避されました。

[編集] 関連項目

範囲の文字を末尾に連結します。
(public member function) [編集]
末尾に文字を追加する
(public member function) [編集]
2つの文字列を連結する
(関数) [編集]
2つの文字列の指定された文字数を連結する
(関数) [編集]
あるワイド文字列のコピーを別のワイド文字列に追加する
(関数) [編集]
あるワイド文字列から別のワイド文字列へ、指定された数のワイド文字を追加する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)