c++ - 基于范围的for循环将对象 move 到另一个容器中?

标签 c++ for-loop range move

理想情况下我想做这样的事情,但这安全/正确吗?当从 some_list move 到 other_list 时,您正在编辑 some_list 的内容,并且每个后续迭代都将无效,因为对象都包含空内容。

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();
}

关于c++ - 基于范围的for循环将对象 move 到另一个容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397826/

相关文章:

c++方法链接返回值不起作用

c++ - 不同类型的for循环c++

c++ - 如果我尝试在 C++ 中将大于 pow(2,64)-1 的值分配给 unsigned long long 会怎样?

php - 如何计算重叠的多个日期之间的日期范围

VBA - 范围对象在循环中仅设置一次

c++ - 类类型和数据成员的 sizeof 引用不同

c++ - 使用 is_integral/BOOST_STATIC_ASSERT 限制模板实例化

c++ - 使用内联汇编创建一个 c++ dll

JavaScript 从 00000 循环到 000256

c++ - 想要在发票程序中使用 while 或 for 循环将字符串项与 C++ 中的整数值匹配