考虑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};
我该怎么做?
请考虑以下便利功能模板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