首页 > 解决方案 > 如何将一个 std::vector 移动附加到另一个?

问题描述

假设我有一个std::vector<T> fromwherestd::vector<T> toT不可复制但可移动的类型,并且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]))的每个元素。fromfrom.clear()

std有没有使用便利功能或包装器的直接方法?

标签: c++c++17stdvectormove-semantics

解决方案


insert将与std::move_iteratorstd::make_move_iterator辅助函数一起正常工作:

to.insert(to.end(),std::make_move_iterator(from.begin()),
    std::make_move_iterator(from.end()));

推荐阅读