Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将对象移动到另一个容器中的循环是否基于范围?_C++_For Loop_Range_Move - Fatal编程技术网

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::返回插入器(其他列表);
一些列表。清除();
}