std::vector::insert
STD::向量::插入
| (1) | |
---|---|---|
iterator insert( iterator pos, const T& value | (until C++11) | |
iterator insert( const_iterator pos, const T& value | (since C++11) | |
iterator insert( const_iterator pos, T&& value | (2) | (since C++11) |
| (3) | |
void insert( iterator pos, size_type count, const T& value | (until C++11) | |
iterator insert( const_iterator pos, size_type count, const T& value | (since C++11) | |
| (4) | |
template< class InputIt > void insert( iterator pos, InputIt first, InputIt last | (until C++11) | |
template< class InputIt > iterator insert( const_iterator pos, InputIt first, InputIt last | (since C++11) | |
iterator insert( const_iterator pos, std::initializer_list<T> ilist | (5) | (since C++11) |
在容器中指定的位置插入元素。
1-2%29次插入value
以前pos
3%29次插入count
的副本value
以前pos
4%29插入范围内的元素[first, last)
以前pos
...
This overload has the same effect as overload (3) if InputIt is an integral type. | (until C++11) |
---|---|
This overload only participates in overload resolution if InputIt qualifies as InputIterator, to avoid ambiguity with the overload (3). | (since C++11) |
如果first
和last
迭代器是否进入*this
...
5%29从初始化程序列表插入元素ilist
以前pos
...
如果新的size()
比旧的更伟大capacity()
.如果新的size()
大于capacity()
,所有迭代器和引用都无效。否则,只有插入点之前的迭代器和引用仍然有效。过去的结束迭代器也是无效的.
参数
pos | - | iterator before which the content will be inserted. pos may be the end() iterator |
---|---|---|
value | - | element value to insert |
first, last | - | the range of elements to insert, can't be iterators into container for which insert is called |
ilist | - | initializer list to insert the values from |
类型要求
-T必须满足CopyAssignable和CopyInsertable的要求,才能使用过载%281%29。
-T必须满足移动分配和移动不可更改的要求,才能使用过载%282%29。
-T必须满足CopyAssignable和CopyInsertable的要求,才能使用过载%283%29。
-T必须符合EmplaceConstrucable的要求,才能使用过载%284,5%29。
-T必须满足移动分配和移动不可更改的要求,才能使用过载%284%29。仅当InputIt满足InputIterator而不满足ForwardIterator时才需要。%28直到C++17%29
-T必须符合可互换、可移动分配、移动可建和可移动的要求,才能使用过载%284,5%29。%28自C++17%29
返回值
1-2%29字符指向插入的value
3%29 Iterator指向插入的第一个元素,或pos
如果count==0
...
4%29 Iterator指向插入的第一个元素,或pos
如果first==last
...
5%29 Iterator指向插入的第一个元素,或pos
如果ilist
是空的。
复杂性
1-2%29常量加线性之间的距离pos
容器的末端。
3%29线性count
加上线性在之间的距离pos
容器的末端。
4%29线性std::distance
(first, last)
加上线性在之间的距离pos
容器的末端。
5%29线性ilist.size()
加上线性在之间的距离pos
容器的末端。
例外
如果在末尾插入单个元素时引发异常,则T为CopyInsertable或std::is_nothrow_move_constructible<T>::value是true,没有效果%28强异常保证%29。
例
二次
#include <iostream>
#include <vector>
void print_vec(const std::vector<int>& vec)
{
for (auto x: vec) {
std::cout << ' ' << x;
}
std::cout << '\n';
}
int main ()
{
std::vector<int> vec(3,100
print_vec(vec
auto it = vec.begin(
it = vec.insert(it, 200
print_vec(vec
vec.insert(it,2,300
print_vec(vec
// "it" no longer valid, get a new one:
it = vec.begin(
std::vector<int> vec2(2,400
vec.insert(it+2, vec2.begin(), vec2.end()
print_vec(vec
int arr[] = { 501,502,503 };
vec.insert(vec.begin(), arr, arr+3
print_vec(vec
}
二次
产出:
二次
100 100 100
200 100 100 100
300 300 200 100 100 100
300 300 400 400 200 100 100 100
501 502 503 300 300 400 400 200 100 100 100
二次
另见
emplace (C++11) | constructs element in-place (public member function) |
---|---|
push_back | adds an element to the end (public member function) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。