创建具有另一个const std :: vector和其他值的const std :: vector

问题描述 投票:2回答:1

考虑const向量v1

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

我想用向量v2的内容创建一个新的常量向量v1,并带有其他值,例如:

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

我该怎么做?

c++ vector stl std
1个回答
0
投票

请考虑以下便利功能模板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 
© www.soinside.com 2019 - 2024. All rights reserved.