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

时间:2014-09-28 08:54:20

标签: c++ c++11 vector

我有一个vector<T, alloc>,其中allocstd::allocator<T>上的一个简单包装器,它执行一些额外的簿记,比如计算创建的对象的数量等。

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

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

2 个答案:

答案 0 :(得分:3)

这确实是STL的一个奇怪的事情。您需要将insert()源向量的值{{1}}放入目标向量中。或者,您可以使用直接解决此问题的多个备用Universe STL实现之一,例如:

制作上述准STL实现的一些人试图将他们的分配器模型更改采用到C ++标准中,但它们没有成功。

答案 1 :(得分:3)

正如John Zwinck在他的回答中解释的那样,你无法移动向量。但是,您可以按如下方式移动向量的元素:

vector<...> u;
...
vector<...> v(
    std::make_move_iterator(u.begin()),
    std::make_move_iterator(u.end())
);

vector<...> u;
vector<...> v;
...
v.insert(
    v.end(),
    std::make_move_iterator(u.begin()),
    std::make_move_iterator(u.end())
);

或(由Oktalist建议)

vector<...> u;
vector<...> v;
...
std::move(u.begin(), u.end(), std::back_inserter(v));