名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
(1)
basic_string& append( size_type count, CharT ch );
(C++20未満)
constexpr basic_string& append( size_type count, CharT ch );
(C++20以上)
(2)
basic_string& append( const basic_string& str );
(C++20未満)
constexpr basic_string& append( const basic_string& str );
(C++20以上)
(3)
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 basic_string& append( const basic_string& str,
                                size_type pos, size_type count = npos );
(C++20以上)
(4)
basic_string& append( const CharT* s, size_type count );
(C++20未満)
constexpr basic_string& append( const CharT* s, size_type count );
(C++20以上)
(5)
basic_string& append( const CharT* s );
(C++20未満)
constexpr basic_string& append( const CharT* s );
(C++20以上)
(6)
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
(C++20未満)
template< class InputIt >
constexpr basic_string& append( InputIt first, InputIt last );
(C++20以上)
(7)
basic_string& append( std::initializer_list<CharT> ilist );
(C++11以上)
(C++20未満)
constexpr basic_string& append( std::initializer_list<CharT> ilist );
(C++20以上)
(8)
template < class T >
basic_string& append( const T& t );
(C++17以上)
(C++20未満)
template < class T >
constexpr basic_string& append( const T& t );
(C++20以上)
(9)
template < class T >

basic_string& append( const T& t,

                      size_type pos, size_type count = npos );
(C++17以上)
(C++20未満)
template < class T >

constexpr basic_string& append( const T& t,

                                size_type pos, size_type count = npos );
(C++20以上)

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

1) 文字 ch のコピーを count 個追加します。
2) 文字列 str を追加します。
3) str の部分文字列 [pos, pos+count) を追加します。 要求された部分文字列が文字列の終端を超える場合、または count == npos の場合、追加される部分文字列は [pos, size())になります。 pos > str.size() の場合は std::out_of_range が投げられます。
4) 範囲 [s, s + count) の文字を追加します。 この範囲はヌル文字を含むことができます。
5) s の指すヌル終端文字列を追加します。 文字列の長さ��� Traits::length(s) を用いて最初のヌル文字によって決定されます。
6) 範囲 [first, last) の文字を追加します。

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

(C++11未満)

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

(C++11以上)
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

[編集]

#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) 文字を3回追加します。
    // 注: これは文字を受け取る唯一のオーバーロードです。
    output.append(3, '*');
    std::cout << "1) " << output << "\n";
 
    // 2) 文字列全体を追加します。
    output.append(str);
    std::cout << "2) " << output << "\n";
 
    // 3) 文字列の一部 (この場合は最後の3文字) を追加します。
    output.append(str, 3, 3);
    std::cout << "3) " << output << "\n";
 
    // 4) C の文字列の一部を追加します。
    // append は *this を返すため、複数の呼び出しを連鎖できることに注意してください。
    output.append(1, ' ').append(carr, 4);
    std::cout << "4) " << output << "\n";
 
    // 5) C の文字列の全体を追加します。
    output.append(cptr);
    std::cout << "5) " << output << "\n";
 
    // 6) 範囲を追加します。
    output.append(&carr[3], std::end(carr));
    std::cout << "6) " << output << "\n";
 
    // 7) 初期化子リストを追加します。
    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

[編集] 関連項目

文字を末尾に追加します
(パブリックメンバ関数) [edit]
2つの文字列を連結します
(関数) [edit]
2つの文字列の文字を一定量連結します
(関数) [edit]
ワイド文字列のコピーを別のワイド文字列に追加します
(関数) [edit]
ワイド文字列から別のワイド文字列へワイド文字を一定量追加します
(関数) [edit]