首页 > 解决方案 > 如何将 std::array 元素附加或插入到 std::vector 中?

问题描述

我对 c++ 比较陌生,我尝试做一些研究,但是在网上搜索时,我主要遇到的是 C 数组,而不是std::array. 将 std::array 元素附加到 std::vector 并将std::array元素插入到 中的最有效方法是std::vector什么?我应该使用 STL 函数std::copy吗?我目前正在使用 C++17,MinGW64。

标签: c++c++17stdvectorstdarray

解决方案


要将现有数组(或一般的其他范围)的元素附加到向量,您可以将向量的插入重载用于迭代器范围:

   vector<int> vec{1, 2, 3};
   array<int, 3> arr{4, 5, 6};
   // arr could be some other container or bare array as well, for ex.:
   // int arr[] = {4, 5, 6};
   // vector<int> arr {4, 5, 6};
   // list<int> arr {4, 5, 6};
   // ...
   
   vec.insert(vec.end(), begin(arr), end(arr));  // insert at vec.end() = append
  //or  vec.insert(vec.end(), arr.begin(), arr.end());  // insert at vec.end() = append

请注意,如果您有其他类型而不是int复制成本高昂,并且您从源数组中移动元素,则可以使用 move_iterator, 例如。

vec.insert(vec.end(), move_iterator(arr.begin()), move_iterator(arr.end()));

对于一般范围内的操作,容器成员函数首选<algorithm>,而不是标题中的同名函数。

因此,例如在这种情况下,vec.insert将立即插入范围,而不是使用std::insertwhere 元素将被一一插入。

Scott Meyers Effective STL很好地解释了这一点。

居住


推荐阅读