C++是否有展开运算符?如何合并初始化vector容器?
C++中的展开运算符与vector合并初始化问题
C++(截至C++23标准)并不支持像JavaScript、Python这类语言那样的...展开运算符,无法直接在初始化列表中通过...v1这种语法展开容器元素。所以你给出的代码:
vector<int> v1={1,2}, v2={3,4}; vector<int> v3={...v1, ...v2, 5};
是无法通过编译的。
实现该需求的最简单方法分几种场景:
通用基础写法(兼容C++11及以上)
直接利用vector的构造函数和insert、push_back方法,这是最直观且无需依赖新特性的方案:
vector<int> v1={1,2}, v2={3,4}; vector<int> v3(v1.begin(), v1.end()); // 先复制v1的所有元素 v3.insert(v3.end(), v2.begin(), v2.end()); // 插入v2的全部元素 v3.push_back(5); // 添加最后一个元素
C++20及以上的简洁写法
如果你的编译器支持C++20,可以借助范围库实现更紧凑的一行式写法:
#include <ranges> #include <vector> int main() { std::vector<int> v1={1,2}, v2={3,4}; std::vector<int> v3 = std::views::concat(v1, v2, std::views::single(5)) | std::ranges::to<std::vector<int>>(); }
复用场景的辅助函数写法
如果需要多次执行类似拼接逻辑,可以封装一个模板函数:
#include <vector> template<typename T> std::vector<T> concat_vectors(const std::vector<T>& a, const std::vector<T>& b, const T& last) { std::vector<T> result(a); result.insert(result.end(), b.begin(), b.end()); result.push_back(last); return result; } // 使用示例 int main() { std::vector<int> v1={1,2}, v2={3,4}; std::vector<int> v3 = concat_vectors(v1, v2, 5); }
内容的提问来源于stack exchange,提问作者Ludovic Aubert
相关产品推荐
相关产品推荐

