C++ 将对象移动到另一个容器中的循环是否基于范围?
理想情况下,我想做类似的事情,但这是否安全/正确?当从某个_列表移动到另一个_列表时,您正在编辑某个_列表的内容,并且每个后续迭代都将无效,因为对象都包含空内容C++ 将对象移动到另一个容器中的循环是否基于范围?,c++,for-loop,range,move,C++,For Loop,Range,Move,理想情况下,我想做类似的事情,但这是否安全/正确?当从某个_列表移动到另一个_列表时,您正在编辑某个_列表的内容,并且每个后续迭代都将无效,因为对象都包含空内容 for (auto& object : some_list) { other_list.emplace_back(std::move(object)); } 是否有任何方法可以使代码更高效/更安全/更好,或者这是我可以做到的最好的方法?仅修改包含的对象不会使迭代器无效,因此此代码是安全的。不过,不需要自己编写循环,因为
for (auto& object : some_list) {
other_list.emplace_back(std::move(object));
}
是否有任何方法可以使代码更高效/更安全/更好,或者这是我可以做到的最好的方法?仅修改包含的对象不会使迭代器无效,因此此代码是安全的。不过,不需要自己编写循环,因为有
std::move
算法:
#include <algorithm>
#include <iterator>
template<typename InContainer, typename OutContainer>
void append_back(InContainer& some_list, OutContainer& other_list)
{
using std::begin;
using std::end;
std::move(begin(some_list), end(some_list), std::back_inserter(other_list);
some_list.clear();
}
#包括
#包括
模板
无效追加回(容器和部分容器列表、出容器和其他容器列表)
{
使用std::begin;
使用std::end;
std::移动(开始(一些列表)、结束(一些列表)、std::返回插入器(其他列表);
一些列表。清除();
}