首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::vector::insert

?

(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为CopyInsertablestd::is_nothrow_move_constructible<T>::valuetrue,没有效果%28强异常保证%29。

二次

代码语言:javascript
复制
#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);
}

二次

产出:

二次

代码语言:javascript
复制
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)

代码语言:txt
复制
 ? cppreference.com

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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com