名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
basic_string& insert( size_type index, size_type count, CharT ch );
(1)
basic_string& insert( size_type index, const CharT* s );
(2)
basic_string& insert( size_type index, const CharT* s, size_type count );
(3)
basic_string& insert( size_type index, const basic_string& str );
(4)
(5)
basic_string& insert( size_type index, const basic_string& str,
                      size_type index_str, size_type count );
(C++14未満)
basic_string& insert( size_type index, const basic_string& str,
                      size_type index_str, size_type count = npos);
(C++14以上)
(6)
iterator insert( iterator pos, CharT ch );
(C++11未満)
iterator insert( const_iterator pos, CharT ch );
(C++11以上)
(7)
void insert( iterator pos, size_type count, CharT ch );
(C++11未満)
iterator insert( const_iterator pos, size_type count, CharT ch );
(C++11以上)
(8)
template< class InputIt >
void insert( iterator pos, InputIt first, InputIt last );
(C++11未満)
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
(C++11以上)
iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );
(9) (C++11以上)
template < class T >
basic_string& insert( size_type pos, const T& t );
(10) (C++17以上)
template < class T >

basic_string& insert( size_type index, const T& t,

                      size_type index_str, size_type count = npos);
(11) (C++17以上)

文字列に文字を挿入します。

1) 位置 index に文字 ch のコピーを count 個挿入します。
2) 位置 indexs の指すヌル終端文字列を挿入します。 文字列の長さは Traits::length(s) を用いて最初のヌル文字によって決定されます。
3) 範囲 [s, s+count) の文字を位置 index に挿入します。 範囲はヌル文字を含むことができます。
4) 位置 index に文字列 str を挿入します。
5) 位置 indexstr.substr(index_str, count) から取得した文字列を挿入します。
6) pos の指す文字の前に文字 ch を挿入します。
7) pos の指す要素 (もしあれば) の前に文字 ch のコピーを count 個挿入します。
8) pos の指す要素 (もしあれば) の前に範囲 [first, last) から文字を挿入します。 このオーバーロードは、 InputItLegacyInputIterator を満たさない場合、オーバーロード解決に参加しません。 (C++11以上)
9) pos の指す要素 (もしあれば) の前に初期化子リスト ilist から要素を挿入します。
10) std::basic_string_view<CharT, Traits> sv = t; によって行われたかのように、 t を文字列ビュー sv に暗黙に変換し、 insert(pos, sv.data(), sv.size()) によって行われたかのように、 pos の指す要素 (もしあれば) の前に sv から要素を挿入します。 このオーバーロードは、std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>>true であり、 std::is_convertible_v<const T&, const CharT*>false である場合にのみ、オーバーロード解決に参加します。
11) std::basic_string_view<CharT, Traits> sv = t; によって行われたかのように、 t を文字列ビュー sv に暗黙に変換し、 pos の指す要素 (もしあれば) の前に sv のサブビュー [index_str, index_str+count) から文字を挿入します。 要求されたサブビューが終端を超える場合、または count == npos の場合、結果のサブビューは [index_str, sv.size())になります。 index_str > sv.size() の場合、または index > 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 である場合にのみ、オーバーロード解決に参加します。

目次

[編集] 引数

index - 内容を挿入する位置
pos - 前に文字を挿入するイテレータ
ch - 挿入する文字
count - 挿入する文字数
s - 挿入する文字列を指すポインタ
str - 挿入する文字列
first, last - 挿入する文字列を定義する範囲
index_str - 挿入する文字列 str 内の最初の文字の位置
ilist - 挿入する文字の std::initializer_list
t - 挿入する文字の (std::basic_string_view に変換可能な) オブジェクト
型の要件
-
InputItLegacyInputIterator の要件を満たさなければなりません。

[編集] 戻り値

1-5,10-11) *this
6-9) 挿入された最初の文字のコピーを参照するイテレータ、または挿入された文字がなかった (count==0 または first==last または ilist.size()==0) 場合は pos

[編集] 例外

1-4, 10) index > size() の場合は std::out_of_range を投げます。
5) index > size() の場合または index_str > str.size() の場合は std::out_of_range を投げます。
11) index > size() の場合または index_str > sv.size() の場合は std::out_of_range を投げます。

すべてのケースにおいて、 size() + ins_count > max_size() の場合は std::length_error を投げます。 ただし ins_count は挿入される文字数です。 また、 Allocator::allocate によって投げられるあらゆる例外を投げる可能性があります。

いずれのケースでも、何らかの理由で例外が投げられた場合、この関数は効果を持ちません (強い例外保証)。 (C++11以上)

[編集] 欠陥報告

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

DR 適用先 発行時の動作 正しい動作
LWG 2946 C++17 string_view overload causes ambiguity in some cases avoided by making it a template

[編集]

#include <cassert>
#include <iterator>
#include <string>
using namespace std::string_literals;
int main()
{
    std::string s = "xmplr";
 
    // insert(size_type index, size_type count, char ch)
    s.insert(0, 1, 'E');
    assert("Exmplr" == s);
 
    // insert(size_type index, const char* s)
    s.insert(2, "e");
    assert("Exemplr" == s);
 
    // insert(size_type index, string const& str)
    s.insert(6, "a"s);
    assert("Exemplar" == s);
 
    // insert(size_type index, string const& str,
    //     size_type index_str, size_type count)
    s.insert(8, " is an example string."s, 0, 14);
    assert("Exemplar is an example" == s);
 
    // insert(const_iterator pos, char ch)
    s.insert(s.cbegin() + s.find_first_of('n') + 1, ':');
    assert("Exemplar is an: example" == s);
 
    // insert(const_iterator pos, size_type count, char ch)
    s.insert(s.cbegin() + s.find_first_of(':') + 1, 2, '=');
    assert("Exemplar is an:== example" == s);
 
    // insert(const_iterator pos, InputIt first, InputIt last)
    {
        std::string seq = " string";
        s.insert(s.begin() + s.find_last_of('e') + 1,
            std::begin(seq), std::end(seq));
        assert("Exemplar is an:== example string" == s);
    }
 
    // insert(const_iterator pos, std::initializer_list<char>)
    s.insert(s.cbegin() + s.find_first_of('g') + 1, { '.' });
    assert("Exemplar is an:== example string." == s);
}


[編集] 関連項目

文字を末尾に追加します
(パブリックメンバ関数) [edit]
文字を末尾に追加します
(パブリックメンバ関数) [edit]