std::basic_string<CharT,Traits,Allocator>:: insert
|
basic_string
&
insert
(
size_type index, size_type count, CharT ch
)
;
|
(1) | (自 C++20 起为 constexpr) |
|
basic_string
&
insert
(
size_type index,
const
CharT
*
s
)
;
|
(2) | (自 C++20 起为 constexpr) |
|
basic_string
&
insert
(
size_type index,
const
CharT
*
s, size_type count
)
;
|
(3) | (自 C++20 起为 constexpr) |
|
basic_string
&
insert
(
size_type index,
const
basic_string
&
str
)
;
|
(4) | (自 C++20 起为 constexpr) |
| (5) | ||
|
basic_string
&
insert
(
size_type index,
const
basic_string
&
str,
size_type s_index, size_type count ) ; |
(C++14 前) | |
|
basic_string
&
insert
(
size_type index,
const
basic_string
&
str,
size_type s_index, size_type count = npos ) ; |
(自 C++14 起)
(自 C++20 起为 constexpr) |
|
| (6) | ||
|
iterator insert
(
iterator pos, CharT ch
)
;
|
(C++11 前) | |
|
iterator insert
(
const_iterator pos, CharT ch
)
;
|
(自 C++11 起)
(自 C++20 起为 constexpr) |
|
| (7) | ||
|
void
insert
(
iterator pos, size_type count, CharT ch
)
;
|
(C++11 前) | |
|
iterator insert
(
const_iterator pos, size_type count, CharT ch
)
;
|
(自 C++11 起)
(自 C++20 起为 constexpr) |
|
| (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 起)
(自 C++20 起为 constexpr) |
|
|
iterator insert
(
const_iterator pos,
std::
initializer_list
<
CharT
>
ilist
)
;
|
(9) |
(自 C++11 起)
(自 C++20 起为 constexpr) |
|
template
<
class
StringViewLike
>
basic_string & insert ( size_type index, const StringViewLike & t ) ; |
(10) |
(自 C++17 起)
(自 C++20 起为 constexpr) |
|
template
<
class
StringViewLike
>
basic_string
&
insert
(
size_type index,
const
StringViewLike
&
t,
|
(11) |
(自 C++17 起)
(自 C++20 起为 constexpr) |
向字符串中插入字符。
[
s
,
s
+
count
)
内的字符。该范围可以包含空字符。
[
first
,
last
)
中的字符,如同通过
insert
(
pos
-
begin
(
)
, basic_string
(
first, last, get_allocator
(
)
)
)
实现。
|
如果
|
(C++11 起) |
std:: basic_string_view < CharT, Traits >> 为 true 且 std:: is_convertible_v < const StringViewLike & , const CharT * > 为 false 时参与重载决议。
[
t_index
,
t_index
+
count
)
中的字符。
-
若请求的子视图超出
sv
的末尾,或若
count
==
npos
,则生成的子视图为
[t_index,sv. size ( ))。 - 若 t_index > sv. size ( ) ,或若 index > size ( ) ,则抛出 std::out_of_range 。
std:: basic_string_view < CharT, Traits >> 为 true 且 std:: is_convertible_v < const StringViewLike & , const CharT * > 为 false 时参与重载决议。
如果 pos 不是指向 * this 的有效迭代器,则行为未定义。
目录 |
参数
| index | - | 内容将插入的位置索引 |
| pos | - | 字符将插入到该迭代器之前 |
| ch | - | 要插入的字符 |
| count | - | 要插入的字符数量 |
| s | - | 要插入的字符串指针 |
| str | - | 要插入的字符串 |
| first, last | - | 定义要插入字符的范围 |
| s_index | - | str 中要插入的第一个字符位置 |
| ilist | - | 要从中插入字符的 std::initializer_list |
| t | - | 要从中插入字符的对象(可转换为 std::basic_string_view ) |
| t_index | - | t 中要插入的第一个字符位置 |
| 类型要求 | ||
-
InputIt
必须满足
LegacyInputIterator
的要求。
|
||
返回值
异常
在所有情况下,若 size ( ) + ins_count > max_size ( ) 则抛出 std::length_error ,其中 ins_count 表示将要插入的字符数量。
|
在所有情况下,如果 std:: allocator_traits < Allocator > :: allocate 抛出异常,该异常会被重新抛出。 |
(since C++20) |
若因任何原因抛出异常,此函数不产生任何效果( 强异常安全保证 )。
示例
#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 s_index, 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); }
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用标准 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 7 | C++98 | 重载 (8) 引用了不存在的重载版本 | 正确引用重载 (4) |
| LWG 847 | C++98 | 未提供异常安全保证 | 增加强异常安全保证 |
| LWG 2946 | C++17 | 重载 (10) 在某些情况下会导致歧义 | 通过将其设为模板来避免歧义 |
参见
|
(C++23)
|
插入字符范围
(公开成员函数) |
|
向末尾追加字符
(公开成员函数) |
|
|
向末尾追加单个字符
(公开成员函数) |