c++ - 使用另一个 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};
我怎么能这样做?
解决方案
考虑以下便利函数模板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
推荐阅读
- mysql - 使用 SQL 命令从服务器上所有数据库的表中获取列值?
- python - Python 方法缺少一个参数,但似乎都在那里
- python - 如何针对由 melt 函数创建的值使用 assign 函数?
- git - 如何将新的 SVN 远程分支添加到现有的 git-svn 存储库
- javascript - 如何在 javascript 或 jQuery 中跨多维数组查找重复项
- css - 如何使 SVG 不拉伸?
- python - 将 C++ 转换为循环 python
- java - 如何根据时间更改文本视图?
- c++ - 如何更改 ASCII 表数据?
- javascript - 我不明白 express.js 代码是如何工作的。没有声明变量“路由器”