为了账号安全,请及时绑定邮箱和手机立即绑定

两个STD:向量的连接

/ 猿问

两个STD:向量的连接

C++
慕姐829404 2019-07-22 14:48:20

两个STD:向量的连接

我怎么把两个连在一起?std::vector是吗?



查看完整描述

3 回答

?
喵喵时光机
vector1.insert( vector1.end(), vector2.begin(), vector2.end() );


查看完整回答
反对 回复 2019-07-22
?
莫回无

如果您使用的是C+11,并且希望移动元素,而不仅仅是复制它们,则可以使用std::move_iterator连同插入(或复制):

#include <vector>#include <iostream>#include <iterator>int main(int argc, char** argv) {
  std::vector<int> dest{1,2,3,4,5};
  std::vector<int> src{6,7,8,9,10};

  // Move elements from src to dest.
  // src is left in undefined but safe-to-destruct state.
  dest.insert(
      dest.end(),
      std::make_move_iterator(src.begin()),
      std::make_move_iterator(src.end())
    );

  // Print out concatenated vector.
  std::copy(
      dest.begin(),
      dest.end(),
      std::ostream_iterator<int>(std::cout, "\n")
    );

  return 0;}

对于使用INT的示例来说,这不会更有效,因为移动它们并不比复制它们更有效,但是对于具有优化移动的数据结构,它可以避免复制不必要的状态:

#include <vector>#include <iostream>#include <iterator>int main(int argc, char** argv) {
  std::vector<std::vector<int>> dest{{1,2,3,4,5}, {3,4}};
  std::vector<std::vector<int>> src{{6,7,8,9,10}};

  // Move elements from src to dest.
  // src is left in undefined but safe-to-destruct state.
  dest.insert(
      dest.end(),
      std::make_move_iterator(src.begin()),
      std::make_move_iterator(src.end())
    );

  return 0;}

移动后,src的元素处于未定义但安全的破坏状态,其前一个元素在结束时直接转移到DEST的新元素。


查看完整回答
反对 回复 2019-07-22
?
繁花如伊

我会用插入函数,类似于:

vector<int> a, b;//fill with datab.insert(b.end(), a.begin(), a.end());


查看完整回答
反对 回复 2019-07-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信