繁体   English   中英

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

[英]Moving from a vector with one allocator to a vector with another

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

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

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

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

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

正如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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM