我有一个vector<T, alloc>
,其中alloc
是std::allocator<T>
上的一个简单包装器,它执行一些额外的簿记,比如计算创建的对象的数量等。
现在我想从vector<T, alloc>
转到vector<T>
。没有向量移动函数似乎接受具有不同分配器的vector
。
如何将数据从一个向量移动到分配器不相同的另一个向量?
答案 0 :(得分:3)
这确实是STL的一个奇怪的事情。您需要将insert()
源向量的值{{1}}放入目标向量中。或者,您可以使用直接解决此问题的多个备用Universe STL实现之一,例如:
Bloomberg基本开发环境(BDE)STL有一个运行时多态分配器:https://github.com/bloomberg/bde/wiki/BDE-Allocator-model。它是同一站点的开源。
此处描述的电子艺术STL:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html在线提供来源:https://github.com/paulhodge/EASTL
制作上述准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));