跳到主要内容

std::string insert() 方法

// (1) Non const version only
constexpr basic_string& insert( size_type index, size_type count, CharT ch );

// (2) Non const version only
constexpr basic_string& insert( size_type index, const CharT* s );

// (3) Non const version only
constexpr basic_string& insert( size_type index, const CharT* s, size_type count );

// (4) Non const version only
constexpr basic_string& insert( size_type index, const basic_string& str );

// (5) Non const version only
constexpr basic_string& insert( size_type index, const basic_string& str,
size_type index_str, size_type count = npos );

// (6) Non const version only
constexpr iterator insert( const_iterator pos, CharT ch );

// (7) Non const version only
constexpr iterator insert( const_iterator pos, size_type count, CharT ch );

// (8) Non const version only
template< class InputIt >
constexpr iterator insert( const_iterator pos, InputIt first, InputIt last );

// (9) Non const version only
constexpr iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );

// (10) Non const version only
template< class StringViewLike >
constexpr basic_string& insert( size_type pos, const StringViewLike& t );

// (11) Non const version only
template< class StringViewLike >
constexpr basic_string& insert( size_type index, const StringViewLike& t,
size_type index_str, size_type count = npos );

在字符串中插入字符。

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

  • (2) 在位置 index 处插入由 s 指向的以 null 结尾的字符字符串。
    字符串的长度由使用 Traits::length(s) 的第一个空字符决定。

  • (3) 在位置 index 处插入范围 [ s, s + count ) 中的字符。
    该范围可以包含 null 字符。

  • (4) 在位置 index 处插入字符串 str

  • (5) 在位置 index 处插入通过 str.substr(index_str, count) 获取的字符串。

  • (6)pos 指向的字符之前插入字符 ch

  • (7)pos 指向的元素(如果有)之前插入 count 个字符 ch 的副本。

  • (8)pos 指向的元素(如果有)之前插入范围 [ first, last ) 中的字符。
    如果 InputIt 不满足 LegacyInputIterator,则此重载不参与重载解析。 (自 C++11 起)

  • (9)pos 指向的元素(如果有)之前插入初始化列表 ilist 中的元素。

  • (10)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后将 sv 中的元素插入到 pos 指向的元素(如果有)之前,如同通过 insert(pos, sv.data(), sv.size())

    重载解析

    此重载仅在 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时参与重载解析。

  • (11)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后将 sv 的子视图 [ index_str, index_str + count ) 中的字符插入到 pos 指向的元素(如果有)之前。
    如果请求的子视图超出了 sv 的末尾,或者如果 count == npos,则生成的子视图为 [ index_str, sv.size() )
    如果 index_str > sv.size(),或者如果 index > size(),则抛出std::out_of_range

    重载解析

    此重载仅在 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时参与重载解析。

参数

  • index - 插入内容的起始位置
  • pos - 插入字符之前的迭代器
  • ch - 要插入的字符
  • count - 要插入的字符数
  • s - 指向要插入的字符字符串的指针
  • str - 要插入的字符串
  • first, last - 定义要插入字符的范围
  • index_str - 要插入的字符串 str 中第一个字符的位置
  • ilist - std::initializer_list,从中插入字符
  • t - 对象(可转换为 std::basic_string_view),从中插入字符

类型要求

返回值

  • (1-5, 10-11) *this
  • (6-9)
    引用第一个插入字符副本的迭代器。
    如果未插入任何字符(count == 0first == lastilist.size() == 0),则为 pos

复杂度

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

异常

在所有情况下,如果 size() + ins_count > max_size(),则抛出 std::length_error,其中 ins_count 是将要插入的字符数,并且可能抛出 Allocator::allocate() 抛出的任何异常。

在任何情况下,如果由于任何原因抛出异常,此函数无效(强异常保证)。 (自 C++11 起)

示例

Main.cpp
#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);
}
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。单击“编辑此页面”以查看此文档所做的所有更改。
悬停查看原始许可证。

std::string insert() 方法

// (1) Non const version only
constexpr basic_string& insert( size_type index, size_type count, CharT ch );

// (2) Non const version only
constexpr basic_string& insert( size_type index, const CharT* s );

// (3) Non const version only
constexpr basic_string& insert( size_type index, const CharT* s, size_type count );

// (4) Non const version only
constexpr basic_string& insert( size_type index, const basic_string& str );

// (5) Non const version only
constexpr basic_string& insert( size_type index, const basic_string& str,
size_type index_str, size_type count = npos );

// (6) Non const version only
constexpr iterator insert( const_iterator pos, CharT ch );

// (7) Non const version only
constexpr iterator insert( const_iterator pos, size_type count, CharT ch );

// (8) Non const version only
template< class InputIt >
constexpr iterator insert( const_iterator pos, InputIt first, InputIt last );

// (9) Non const version only
constexpr iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );

// (10) Non const version only
template< class StringViewLike >
constexpr basic_string& insert( size_type pos, const StringViewLike& t );

// (11) Non const version only
template< class StringViewLike >
constexpr basic_string& insert( size_type index, const StringViewLike& t,
size_type index_str, size_type count = npos );

在字符串中插入字符。

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

  • (2) 在位置 index 处插入由 s 指向的以 null 结尾的字符字符串。
    字符串的长度由使用 Traits::length(s) 的第一个空字符决定。

  • (3) 在位置 index 处插入范围 [ s, s + count ) 中的字符。
    该范围可以包含 null 字符。

  • (4) 在位置 index 处插入字符串 str

  • (5) 在位置 index 处插入通过 str.substr(index_str, count) 获取的字符串。

  • (6)pos 指向的字符之前插入字符 ch

  • (7)pos 指向的元素(如果有)之前插入 count 个字符 ch 的副本。

  • (8)pos 指向的元素(如果有)之前插入范围 [ first, last ) 中的字符。
    如果 InputIt 不满足 LegacyInputIterator,则此重载不参与重载解析。 (自 C++11 起)

  • (9)pos 指向的元素(如果有)之前插入初始化列表 ilist 中的元素。

  • (10)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后将 sv 中的元素插入到 pos 指向的元素(如果有)之前,如同通过 insert(pos, sv.data(), sv.size())

    重载解析

    此重载仅在 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时参与重载解析。

  • (11)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后将 sv 的子视图 [ index_str, index_str + count ) 中的字符插入到 pos 指向的元素(如果有)之前。
    如果请求的子视图超出了 sv 的末尾,或者如果 count == npos,则生成的子视图为 [ index_str, sv.size() )
    如果 index_str > sv.size(),或者如果 index > size(),则抛出std::out_of_range

    重载解析

    此重载仅在 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时参与重载解析。

参数

  • index - 插入内容的起始位置
  • pos - 插入字符之前的迭代器
  • ch - 要插入的字符
  • count - 要插入的字符数
  • s - 指向要插入的字符字符串的指针
  • str - 要插入的字符串
  • first, last - 定义要插入字符的范围
  • index_str - 要插入的字符串 str 中第一个字符的位置
  • ilist - std::initializer_list,从中插入字符
  • t - 对象(可转换为 std::basic_string_view),从中插入字符

类型要求

返回值

  • (1-5, 10-11) *this
  • (6-9)
    引用第一个插入字符副本的迭代器。
    如果未插入任何字符(count == 0first == lastilist.size() == 0),则为 pos

复杂度

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

异常

在所有情况下,如果 size() + ins_count > max_size(),则抛出 std::length_error,其中 ins_count 是将要插入的字符数,并且可能抛出 Allocator::allocate() 抛出的任何异常。

在任何情况下,如果由于任何原因抛出异常,此函数无效(强异常保证)。 (自 C++11 起)

示例

Main.cpp
#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);
}
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。单击“编辑此页面”以查看此文档所做的所有更改。
悬停查看原始许可证。