c++11 标准模板(STL)string(八)

string操作   

插入字符  insert

std::basic_string::insert

1) 在位置 index 插入 count 个字符 ch 的副本。 

basic_string& insert( size_type index, size_type count, CharT ch );

调用示例

    //在位置 index 插入 count 个字符 ch 的副本。
    str.insert(2, 5, 'H');
    std::cout << "str insert: " << str << std::endl << std::endl;

2) 在位置 index 插入 s 所指向的空终止字符串。字符串的长度由首个空字符,用 Traits::length(s) 确定。

basic_string& insert( size_type index, const CharT* s );

调用示例

    // 在位置 index 插入 s 所指向的空终止字符串。
    // 字符串的长度由首个空字符,用 Traits::length(s) 确定。
    str.insert(2, str1.c_str());
    std::cout << "str insert: " << str << std::endl << std::endl;

3) 在位置 index 插入范围 [s, s+count) 中的字符。范围能含有空字符。

basic_string& insert( size_type index, const CharT* s, size_type count );

 调用示例

    // 在位置 index 插入范围 [s, s+count) 中的字符。范围能含有空字符。
    string str2 = "abcdefg hijk";
    str = str2;
    str.insert(2, str.c_str(), str2.size());
    std::cout << "str insert: " << str << std::endl << std::endl;

4) 在位置 index 插入 string str

basic_string& insert( size_type index, const basic_string& str );

调用示例

    // 在位置 index 插入 string str 。
    str = str2;
    str.insert(2, str2);
    std::cout << "str insert: " << str << std::endl << std::endl;

5) 在位置 index 插入由 str.substr(index_str, count) 获得的 string 。

basic_string& insert( size_type index, const basic_string& str,
                       size_type index_str, size_type count );

调用示例

    // 在位置 index 插入由 str.substr(index_str, count) 获得的 string 。
    str = str2;
    str.insert(2, str2, 0, 5);
    std::cout << "str insert: " << str << std::endl << std::endl;

6) 在 pos 所指向的字符前插入字符 ch

iterator insert( iterator pos, CharT ch );                (C++11 前) 

iterator insert( const_iterator pos, CharT ch );          (C++11 起) 

调用示例

    // 在 pos 所指向的字符前插入字符 ch 。
    str = str2;
    str.insert(str.begin() + 2, 'K');
    std::cout << "str insert: " << str << std::endl << std::endl;

7) 在 pos 所指向的元素(若存在)前插入 count 个字符 ch 的副本。

void insert( iterator pos, size_type count, CharT ch );           (C++11 前) 

iterator insert( const_iterator pos, size_type count, CharT ch ); (C++11 起) 

调用示例

    //  在 pos 所指向的元素(若存在)前插入 count 个字符 ch 的副本。
    str = str2;
    str.insert(str.begin() + 2, 5, 'K');
    std::cout << "str insert: " << str << std::endl << std::endl;

8) 在 pos 所指向的元素(若存在)前插入来自范围 [first, last) 的元素。

InputIt 不满足遗留输入迭代器 (LegacyInputIterator) 则此重载不参与重载决议。 (C++11 起)

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 起) 

调用示例

    // 在 pos 所指向的元素(若存在)前插入来自范围 [first, last) 的元素。
    str = str2;
    str.insert(str.begin() + 2, str2.begin() + 1, str2.begin() + 5);
    std::cout << "str insert: " << str << std::endl << std::endl;

 9) 在 pos 所指向的元素(若存在)前插入来自 initializer_list ilist 的字符。

iterator insert( const_iterator pos, std::initializer_list ilist );
    // 在 pos 所指向的元素(若存在)前插入来自 initializer_list ilist 的字符。
    str = str2;
    str.insert(str.begin() + 2, {'A', 'B', 'C'});
    std::cout << "str insert: " << str << std::endl << std::endl;

参数

index - 插入内容到的位置
pos - 将插入字符到其前的迭代器
ch - 要插入的字符
count - 要插入的字符数
s - 指向要插入的字符串的指针
str - 要插入的 string
first, last - 定义要插入字符的范围
index_str - string str 中要插入的首字符位置
ilist - 要插入的字符来源的 std::initializer_list
t - 要插入的字符来源对象(可转换为 std::basic_string_view )
类型要求
- InputIt 必须满足遗留输入迭代器 (LegacyInputIterator) 的要求。

返回值

1-5,10-11) *this

6-9) 指代首个被插入字符的迭代器,或若未插入字符则为 poscount == 0ilist.size() == 0first == last

异常

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++ 标准。

 

调用示例

    std::cout << "test_operation begin" << std::endl;
    string str = "abcdefg hijk";
    string str1 = "str1";

    // 插入字符
    //在位置 index 插入 count 个字符 ch 的副本。
    str.insert(2, 5, 'H');
    std::cout << "str insert: " << str << std::endl << std::endl;

    // 在位置 index 插入 s 所指向的空终止字符串。
    // 字符串的长度由首个空字符,用 Traits::length(s) 确定。
    str.insert(2, str1.c_str());
    std::cout << "str insert: " << str << std::endl << std::endl;

    // 在位置 index 插入范围 [s, s+count) 中的字符。范围能含有空字符。
    string str2 = "abcdefg hijk";
    str = str2;
    str.insert(2, str.c_str(), str2.size());
    std::cout << "str insert: " << str << std::endl << std::endl;

    // 在位置 index 插入 string str 。
    str = str2;
    str.insert(2, str2);
    std::cout << "str insert: " << str << std::endl << std::endl;

    // 在位置 index 插入由 str.substr(index_str, count) 获得的 string 。
    str = str2;
    str.insert(2, str2, 0, 5);
    std::cout << "str insert: " << str << std::endl << std::endl;

    // 在 pos 所指向的字符前插入字符 ch 。
    str = str2;
    str.insert(str.begin() + 2, 'K');
    std::cout << "str insert: " << str << std::endl << std::endl;

    //  在 pos 所指向的元素(若存在)前插入 count 个字符 ch 的副本。
    str = str2;
    str.insert(str.begin() + 2, 5, 'K');
    std::cout << "str insert: " << str << std::endl << std::endl;

    // 在 pos 所指向的元素(若存在)前插入来自范围 [first, last) 的元素。
    str = str2;
    str.insert(str.begin() + 2, str2.begin() + 1, str2.begin() + 5);
    std::cout << "str insert: " << str << std::endl << std::endl;

    // 在 pos 所指向的元素(若存在)前插入来自 initializer_list ilist 的字符。
    str = str2;
    str.insert(str.begin() + 2, {'A', 'B', 'C'});
    std::cout << "str insert: " << str << std::endl << std::endl;

c++11 标准模板(STL)string(八)_第1张图片

 

你可能感兴趣的:(c++标准模板(STL),c++,STL,string)