c++ - 如何将一个 std::vector 移动附加到另一个?
问题描述
假设我有一个std::vector<T> from
wherestd::vector<T> to
是T
不可复制但可移动的类型,并且to
可能为空,也可能不为空。我希望所有元素都from
附加在to
.
如果我将std::vector<T>::insert(const_iterator pos, InputIt first, InputIt last)
重载 (4) 与 一起使用pos = to.end()
,它将尝试复制所有对象。
现在,如果to.empty()
我可以的话std::move(from)
,我可以先from.reserve(from.size()+to.size())
手动然后手动地和 finallyto.emplace_back(std::move(from[i]))
的每个元素。from
from.clear()
std
有没有使用便利功能或包装器的直接方法?
解决方案
insert
将与std::move_iterator和std::make_move_iterator辅助函数一起正常工作:
to.insert(to.end(),std::make_move_iterator(from.begin()),
std::make_move_iterator(from.end()));
推荐阅读
- macros - 如何在 Racket 中直接使用阅读器宏?
- python - Tensorflow / Keras 自定义损失函数
- java - 降低程序的复杂性
- python - 如何让我的代码检测到皇家同花顺和顺子?
- python - 无法使用 pip 安装 tensorflow
- go - 获取p7m文件内容
- linux - 任何人在自由运行时都遇到过这个“/usr/local/bin/footloose: line 1: Not: command not found”
- svg - 创建一个没有圆圈本身的 SVG 圆圈的投影
- android - 如何实现drawable的部分变色?
- python - AWS CDK 补丁基准