在线文档教程
C++
容器 | Containers

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)

如果firstlast迭代器是否进入*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_backadds an element to the end (public member function)

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/容器/VISTIC/INSERT