Ben*_*igt 31
哇.如此多的答案都很接近,没有一个正确的答案.你需要两个resize(或reserve)copy_n,并记住原始大小.
auto old_count = xx.size();
xx.resize(2 * old_count);
std::copy_n(xx.begin(), old_count, xx.begin() + old_count);
Run Code Online (Sandbox Code Playgroud)
要么
auto old_count = xx.size();
xx.reserve(2 * old_count);
std::copy_n(xx.begin(), old_count, std::back_inserter(xx));
Run Code Online (Sandbox Code Playgroud)
使用时reserve,copy_n是必需的,因为end()迭代器指向一个元素超过结尾...这意味着它也不是第一次插入的"插入点之前",并且变为无效.
23.3.6.5 [vector.modifiers]承诺,为insert和push_back:
备注:如果新大小大于旧容量,则会导致重新分配.如果没有重新分配,插入点之前的所有迭代器和引用仍然有效.如果除了复制构造函数之外抛出异常,移动构造函数,赋值运算符或T的移动赋值运算符,或者通过任何InputIterator操作都没有效果.如果非CopyInsertable T的移动构造函数抛出异常,则指定的效果未指定.