You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:01:03