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

如何将两个const std::vector合并为新的const std::vector?

合并两个const std::vector为新const std::vector的实现方法

由于目标vector是const类型,无法先创建空对象再追加元素,必须在初始化阶段完成合并操作,以下是几种可行方案:

方法1:自定义辅助函数合并

编写一个模板函数,接收两个const vector并返回合并后的vector,直接用该返回值初始化目标const vector:

#include <iostream>
#include <vector>

template <typename T>
std::vector<T> merge(const std::vector<T>& vec1, const std::vector<T>& vec2) {
    std::vector<T> merged;
    merged.reserve(vec1.size() + vec2.size()); // 预分配空间,避免多次扩容
    merged.insert(merged.end(), vec1.begin(), vec1.end());
    merged.insert(merged.end(), vec2.begin(), vec2.end());
    return merged;
}

int main()
{
    const std::vector<int> int_a{0,1};
    const std::vector<int> int_b{2,3};
    const std::vector<int> all_ints = merge(int_a, int_b);
    
    for (int i: all_ints)
        std::cout << i << ' '; // 输出:0 1 2 3
    return 0;
}

方法2:用Lambda表达式原地生成

无需额外定义函数,直接用lambda在初始化时生成合并后的临时vector:

#include <iostream>
#include <vector>

int main()
{
    const std::vector<int> int_a{0,1};
    const std::vector<int> int_b{2,3};
    const std::vector<int> all_ints = [&]() {
        std::vector<int> temp;
        temp.reserve(int_a.size() + int_b.size());
        temp.insert(temp.end(), int_a.begin(), int_a.end());
        temp.insert(temp.end(), int_b.begin(), int_b.end());
        return temp;
    }(); // 立即执行lambda
    
    for (int i: all_ints)
        std::cout << i << ' '; // 输出:0 1 2 3
    return 0;
}

方法3:C++20及以上使用范围库拼接

利用C++20的std::ranges::concat_view拼接两个范围,再用其初始化vector:

#include <iostream>
#include <vector>
#include <ranges>

int main()
{
    const std::vector<int> int_a{0,1};
    const std::vector<int> int_b{2,3};
    const auto concat_view = std::ranges::concat(int_a, int_b);
    const std::vector<int> all_ints(concat_view.begin(), concat_view.end());
    
    for (int i: all_ints)
        std::cout << i << ' '; // 输出:0 1 2 3
    return 0;
}

如果使用C++23,还可以用更简洁的std::ranges::to适配器直接转换:

const std::vector<int> all_ints = std::ranges::concat(int_a, int_b) | std::ranges::to<std::vector<int>>();

内容的提问来源于stack exchange,提问作者Manumerous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:05:18