我计划将列表中的一些元素移动到目标容器(比如vector)中进行进一步的处理。使用move_iterator
将元素移动到目标容器中是否安全?使用erase
将源容器中的 * 移动部分 * 移动到目标容器中是否安全?
#include<list>
#include<vector>
#include<iterator>
struct DataPoint {};
int main() {
std::list<Datapoint> d_data; // source
std::vector<Datapoint> v2; // target
v2.insert(v2.end(),
std::make_move_iterator(d_data.begin()),
std::make_move_iterator(d_data.begin() + size)
);
d_data.erase(d_data.begin(), d_data.begin() + size); // safe? necessary?
//...
//d_batch->addData(v2);
return 0;
}
2条答案
按热度按时间xxb16uws1#
您可能会发现
std::move
更容易使用。是的,您确实需要删除源容器中移动的元素。
Demo(https://godbolt.org/z/bMdTxPfK1)
mbzjlibv2#
使用move_iterator移动到目标并擦除源容器的移动部分是否安全?
是的,两个都是真的,您可以从容器中移动对象,并且所有被移除的对象都将变为“有效但未指定的状态”。因此,如果您想重新使用它们,您可以分配新值并使用它。如果不需要,您可以安全地删除它们。