c++ - 基于范围的for循环将对象移动到另一个容器中?
问题描述
理想情况下,我想做这样的事情,但这安全/正确吗?从 some_list 移动到 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();
}
推荐阅读
- android - 我应该如何将 Dagger2 与 Retrofit 一起使用?
- go - 如何在 Go 中创建 AWS Lambda 来处理多个事件
- f# - How to define optional parameters in F# modules?
- c# - 如何使用 Newtonsoft.Json 反序列化 influxDB JSON 查询以使其看起来像一个表?
- docker - 从 Docker Compose 文件中的 Gitlab 注册表中提取图像
- wordpress - 我必须做什么才能在 xampp 中为我的 wordpress 实例创建一个本地域,以便为任何设备访问它(现有的 wordpress 项目)
- excel - 如何停止“复杂”宏(无法用现有主题解决此问题)
- c# - Tortoise svnversion.exe is invalid error in mvc
- node.js - URL 在浏览器中加载,但不在终端中(curl 或 Node.js)
- django - Django模型问题