协慌网

登录 贡献 社区

连接两个 std :: vector

如何串联两个std::vector

答案

vector1.insert( vector1.end(), vector2.begin(), vector2.end() );

如果您使用的是 C ++ 11,并且希望移动这些元素而不是仅复制它们,则可以将std::move_iterator与 insert(或 copy)一起使用:

#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 的新元素中。

我将使用insert 函数,类似:

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