std::string insert() 方法
- 自 C++20 起
- 自 C++17 起
- 自 C++14 起
- 自 C++11 起
- 直到 C++11
// (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) Non const version only
basic_string& insert( size_type index, size_type count, CharT ch );
// (2) Non const version only
basic_string& insert( size_type index, const CharT* s );
// (3) Non const version only
basic_string& insert( size_type index, const CharT* s, size_type count );
// (4) Non const version only
basic_string& insert( size_type index, const basic_string& str );
// (5) Non const version only
basic_string& insert( size_type index, const basic_string& str,
size_type index_str, size_type count = npos );
// (6) Non const version only
iterator insert( const_iterator pos, CharT ch );
// (7) Non const version only
iterator insert( const_iterator pos, size_type count, CharT ch );
// (8) Non const version only
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
// (9) Non const version only
iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );
// (10) Non const version only
template< class StringViewLike >
basic_string& insert( size_type pos, const StringViewLike& t );
// (11) Non const version only
template< class StringViewLike >
basic_string& insert( size_type index, const StringViewLike& t,
size_type index_str, size_type count = npos );
// (1) Non const version only
basic_string& insert( size_type index, size_type count, CharT ch );
// (2) Non const version only
basic_string& insert( size_type index, const CharT* s );
// (3) Non const version only
basic_string& insert( size_type index, const CharT* s, size_type count );
// (4) Non const version only
basic_string& insert( size_type index, const basic_string& str );
// (5) Non const version only
basic_string& insert( size_type index, const basic_string& str,
size_type index_str, size_type count = npos );
// (6) Non const version only
iterator insert( const_iterator pos, CharT ch );
// (7) Non const version only
iterator insert( const_iterator pos, size_type count, CharT ch );
// (8) Non const version only
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
// (9) Non const version only
iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );
// (1) Non const version only
basic_string& insert( size_type index, size_type count, CharT ch );
// (2) Non const version only
basic_string& insert( size_type index, const CharT* s );
// (3) Non const version only
basic_string& insert( size_type index, const CharT* s, size_type count );
// (4) Non const version only
basic_string& insert( size_type index, const basic_string& str );
// (5) Non const version only
basic_string& insert( size_type index, const basic_string& str,
size_type index_str, size_type count );
// (6) Non const version only
iterator insert( const_iterator pos, CharT ch );
// (7) Non const version only
iterator insert( const_iterator pos, size_type count, CharT ch );
// (8) Non const version only
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
// (9) Non const version only
iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );
// (1) Non const version only
basic_string& insert( size_type index, size_type count, CharT ch );
// (2) Non const version only
basic_string& insert( size_type index, const CharT* s );
// (3) Non const version only
basic_string& insert( size_type index, const CharT* s, size_type count );
// (4) Non const version only
basic_string& insert( size_type index, const basic_string& str );
// (5) Non const version only
basic_string& insert( size_type index, const basic_string& str,
size_type index_str, size_type count );
// (6) Non const version only
iterator insert( iterator pos, CharT ch );
// (7) Non const version only
void insert( iterator pos, size_type count, CharT ch );
// (8) Non const version only
template< class InputIt >
void insert( iterator pos, InputIt first, InputIt last );
// (9) Non const version only
iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );
在字符串中插入字符。
-
(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>>
为true
且std::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>>
为true
且std::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
),从中插入字符
类型要求
- (8) -
T
(容器的元素类型) 必须满足LegacyInputIterator
的要求。
返回值
- (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()
抛出的任何异常。
示例
#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);
}