template
iterator emplace (const_iterator position, Args&&... args);
通过在指定位置插入一个新的元素以扩展容器,新的元素的值为args或者是元素根据args的值构造。
这是一种高效的增加容器大小的方法。
An automatic reallocation of the allocated storage space happens if -and only if- the new vector size surpasses the current vector capacity.
如果新的数组的大小超过了现在数组的capacity,那么将会自动发生重分配。
Because vectors use an array as their underlying storage, inserting elements in positions other than the vector end causes the container to shift all the elements that were after position by one to their new positions. This is generally an inefficient operation compared to the one performed by other kinds of sequence containers (such as list or forward_list). See emplace_back for a member function that extends the container directly at the end.
因为vector是使用array作为底层的存储容器,在指定位置插入元素代表着容器将要移动所有position后面的元素到一个新的位置。这通常都是很低效率的事情(相对于另一种更高效的插入序列容器,例如list或者forward_list),emplace_back则是一种直接在数组最后位置扩展的方法。
元素是使用allocator_traits::construct以及args来构造。
A similar member function exists, insert, which either copies or moves existing objects into the container.
一个类似的方法是insert,这个则是通过拷贝或者移动存在的对象到容器内。
Member type const_iterator is a random access iterator type that points to a const element.
新元素插入容器的位置。
类型为随机访问迭代器。注意是const_iterator.
用于构造新元素的参数。
例子:
#include
#include
#include
using namespace std;
int main(int argc,char **argv)
{
vector vi={10,20,30};
auto it=vi.begin();
it++;
cout<<"now vi is :";
for_each(vi.begin(),vi.end(),[](int m){cout<
运行截图:
返回值是一个指向新插入的元素的iterator。
类型为随机访问迭代器。
If a reallocation happens, the storage is allocated using the container's allocator, which may throw exceptions on failure (for the default allocator, bad_alloc is thrown if the allocation request does not succeed).
如果发生了重分配,将使用容器的分配器进行内存分配,这可能会抛出异常。(例如allocator这个默认的分配器在请求失败时会抛出bad_alloc异常)
|
|
Edit & Run
|
myvector contains: 10 200 100 20 30 300
|
如果发生重分配,重分配过程将导致与整个数组大小的线性时间的复杂度。(复制)
If a reallocation happens, all iterators, pointers and references related to this container are invalidated.
如果发生重分配,所由的迭代器,指针以及引用都将失效。
否则,只有那些指向position以及更后面的将会失效,所有position之前的迭代器,指针,引用依旧有效。
The container is modified.
容器将被修改。
If a reallocation happens, all contained elements are modified.
如果发生重分配,容器内所有元素都将被修改。
Otherwise, none of the elements before position is accessed, and concurrently accessing or modifying them is safe.
否则,position之前的元素不会被访问,同时修改以及访问他们都是安全的。
If position is end, and no reallocations happen, there are no changes in the container in case of exception (strong guarantee).
如果位置为end,并且不发生重分配,发生异常的规则不变。
If a reallocation happens, the strong guarantee is also given if the type of the elements is either copyable or no-throw moveable.
如果发生重分配,并且元素的拷贝或者移动构造不会抛出异常,发生异常的规则也是一样的。
Otherwise, the container is guaranteed to end in a valid state (basic guarantee).
否则,容器保证最后依旧有效。
If allocator_traits::construct is not supported with the appropriate arguments, or if position is not valid, it causes undefined behavior.
如果allocator_traits::construct不支持该元素,或者position不是有效的,将导致未知的行为。
//翻译的不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
2014-8-17
于GDUT