C++ 使用另一个const std::vector和其他值创建一个const std::vector
考虑常数向量C++ 使用另一个const std::vector和其他值创建一个const std::vector,c++,vector,stl,std,C++,Vector,Stl,Std,考虑常数向量v1 const std::vector<int> v1{0, 1, 2, 3, 4}; 我如何才能做到这一点?考虑以下方便函数模板,make_vector(): 输出: 1 2 3 4 5 6 创建一个临时向量,构建它的内容,然后使用它来构建v2。或者,定义并实现一个自定义迭代器类,该类迭代v1的所有内容和新值,然后使用std::vector构造函数,这是一个模板,它接受一个由开始迭代器和结束迭代器定义的序列。我目前有一个函数,它将v1和附加值组合在一起,并返回一
v1
const std::vector<int> v1{0, 1, 2, 3, 4};
我如何才能做到这一点?考虑以下方便函数模板,
make_vector()
:
输出:
1 2 3 4 5 6
创建一个临时向量,构建它的内容,然后使用它来构建
v2
。或者,定义并实现一个自定义迭代器类,该类迭代v1
的所有内容和新值,然后使用std::vector
构造函数,这是一个模板,它接受一个由开始迭代器和结束迭代器定义的序列。我目前有一个函数,它将v1
和附加值组合在一起,并返回一个新的向量进行构造,但是我想问是否有一个更优雅的解决方案来解决这个问题。C++库中没有任何东西。这也是我的猜测,但是我不太确信为什么我确信C++库中没有类似的东西,因为这样的事情只能用两种方式来完成。1) 一个专用的向量构造函数,我很确定没有;2)C++语言的语法和句法的基本部分,我很肯定是不存在的。没有其他的可能性。谢谢你花时间回答这个问题,我已经按照你描述的方式解决了这个问题,但是我的问题是,是否有一个更优雅的解决方案来解决这个问题,比如const std::vector v2{v1,5,6,7,8,9}
@emm我能想到的另一种方法是创建自己的类型,该类型在构造时采用向量和初始值设定项列表
,并提供begin()
和end()
成员函数。
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;
}
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