Namespaces
Variants

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

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

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

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

文字列に追加の文字を追加します。

1) 文字 ch count 回分追加します。
2) 範囲 [ s , s + count ) 内の文字を追加します。
[ s , s + count ) 有効な範囲 でない場合、動作は未定義です。
3) 次と同等: return append ( s, Traits :: length ( s ) ) ;
4,5) 文字列ビューの文字を追加 sv t から構築される。
  • t のみが指定された場合、 sv 内の全ての文字が追加される。
  • pos も指定された場合:
    • count npos の場合、 pos から始まる sv 内の全ての文字が追加される。
    • それ以外の場合、 std:: min ( count, sv. size ( ) - pos ) 文字が pos から始まる sv 内から追加される。
これらのオーバーロードは、以下の全ての条件が満たされる場合にのみオーバーロード解決に参加します:
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 も指定された場合:
    • count npos の場合、 pos から始まる str の全ての文字が追加されます。
    • それ以外の場合、 std:: min ( count, str. size ( ) - pos ) 文字分、 pos から始まる str の文字が追加されます。
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以前)

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

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

目次

翻訳のポイント: - 「Contents」を「目次」に翻訳 - C++関連の専門用語(Parameters、Return value、Complexity、Exceptions、Example、Defect reports、See also)は原文のまま保持 - HTMLタグ、属性、クラス名、IDは一切変更せず - 数値、構造、書式は完全に維持

パラメータ

count - 追加する文字数
ch - 追加する文字値
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 をスローする。

何らかの理由で例外がスローされた場合、この関数は何も効果を持ちません( strong exception safety guarantee )。

#include <cassert>
#include <string>
int main()
{
    std::string str = "std::string";
    const char* cptr = "C-string";
    const char carr[] = "range";
    std::string result;
    // 1) 文字を3回追加
    // 注: これは「CharT」を受け入れる唯一のオーバーロードです
    result.append(3, '*');
    assert(result == "***");
    // 2) 固定長C文字列を追加
    result.append(cptr, 5);
    assert(result == "***C-str");
    // 3) ヌル終端C文字列を追加
    // 注: 「append」は*thisを返すため、呼び出しを連鎖できます
    result.append(1, ' ').append(cptr);
    assert(result == "***C-str C-string");
    // 6) 文字列全体を追加
    result.append(1, ' ').append(str);
    assert(result == "***C-str C-string std::string");
    // 7) 文字列の一部を追加
    result.append(str, 3, 2);
    assert(result == "***C-str C-string std::string::");
    // 8) 範囲を追加
    result.append(&carr[2], &carr[3]);
    assert(result == "***C-str C-string std::string::n");
    // 9) 初期化子リストを追加
    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) は一部の場合に曖昧性を引き起こす テンプレート化することで回避

関連項目

範囲の文字を末尾に追加する
(公開メンバ関数)
文字を末尾に追加する
(公開メンバ関数)
2つの文字列を連結する
(関数)
2つの文字列の特定の量の文字を連結する
(関数)
ワイド文字列のコピーを別のワイド文字列に追加する
(関数)
1つのワイド文字列から別のワイド文字列へ特定の量のワイド文字を追加する
(関数)