首页 > 解决方案 > 使用另一个 const std::vector 和附加值创建一个 const std::vector

问题描述

考虑一个常量向量v1

const std::vector<int> v1{0, 1, 2, 3, 4};

我想创建一个新的 const 向量v2,其中包含带有附加值的向量内容,v1如下所示:

const std::vector<int> v1{0, 1, 2, 3, 4};
const std::vector<int> v2{v1, 5, 6, 7, 8, 9};

我怎么能这样做?

标签: c++vectorstlstd

解决方案


考虑以下便利函数模板make_vector()

template<typename T>
std::vector<T> make_vector(const std::vector<T>& v, std::initializer_list<T> l) {
   std::vector<T> u(v);
   u.insert(u.end(), l.begin(), l.end());
   return u;
}

它创建一个临时向量u,其中包含传递给函数的向量元素和initializer_list.

请注意,便利函数const按值返回对象通常意义不大(例如,返回的对象不能移动)。因此,上面的便捷函数返回一个非const向量,即std::vector<T>. 但是,您可以const用这个返回的非const向量初始化一个向量,它将被移动初始化。

auto main() -> int {
   const std::vector<int> u{1, 2, 3};
   auto const v = make_vector(u, {4, 5, 6});

   for (auto elem: v)
      std::cout << elem << ' ';
   std::cout << '\n';
}

输出:

1 2 3 4 5 6 

推荐阅读