插入仅移动类型的向量

Ker*_*g73 5 c++ stl vector c++17

我有一个std::vector<std::unique_ptr<T>>.我想在这个向量的中间insert有些人nullptr.我试过vec.insert(first, size, nullptr)但这显然不起作用,因为nullptr需要复制.我可以反复调用单数版,insert但我想知道是否有更有效的方法.

Sto*_*ica 6

"高效"是需要衡量的.但是如果你想要一次性移动元素而不是不断地向右移动一个项目,你可以用它来做std::rotate.这是如何做

vec.resize(vec.size() + size); // Add the "null" pointers to the end.
// Obtain valid first after resize
std::rotate(first, vec.end() - size, vec.end());
Run Code Online (Sandbox Code Playgroud)

由于函数rotate是使中间迭代器成为范围的"新的第一个",而它前面的迭代器是"新的最后一个",上面的迭代器选择会将空指针的范围移动到它们的预期位置(在第一个之前) ).

此外,由于您标记了C++ 17,您还可以将标准算法传递给执行策略,并希望获得一些并行性来启动.

  • 请注意`resize()`可能会使`first`无效...一般来说,`first`应该在`resize()`之后(或者至少是`reserve()`)确定. (4认同)