从具有一个分配器的向量移动到具有另一个分配器的向量

Pup*_*ppy 6 c++ vector c++11

我有一个vector<T, alloc>地方alloc是一个简单的包装器,std::allocator<T>它执行一些额外的簿记,比如计算创建的对象的数量等.

现在我想从我vector<T, alloc>进入vector<T>.没有向量移动函数似乎接受vector具有不同分配器的s.

如何在分配器不相同的情况下将数据从一个向量移动到另一个向量?

Joh*_*åde 4

正如约翰·兹温克(John Zwinck)在他的回答中解释的那样,你不能移动向量。但是,您可以按如下方式移动向量的元素:

vector<...> u;
...
vector<...> v(
    std::make_move_iterator(u.begin()),
    std::make_move_iterator(u.end())
);
Run Code Online (Sandbox Code Playgroud)

或者

vector<...> u;
vector<...> v;
...
v.insert(
    v.end(),
    std::make_move_iterator(u.begin()),
    std::make_move_iterator(u.end())
);
Run Code Online (Sandbox Code Playgroud)

或(Oktalist 建议)

vector<...> u;
vector<...> v;
...
std::move(u.begin(), u.end(), std::back_inserter(v));
Run Code Online (Sandbox Code Playgroud)

  • `std::move(u.begin(), u.end(), std::back_inserter(v));` 作为第二种情况的替代方案。 (2认同)