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

我的C++简单合并算法为何无法正常运行?

问题分析与修复方案

嘿,我来帮你找出问题所在!你的代码里有两个核心问题导致输出全是0,咱们一步步拆解:

1. vector初始化方式完全错了!

你用std::vector<int> vec1{5};这种写法,在C++里是列表初始化,意思是创建一个只包含单个元素「5」的vector,而不是大小为5的vector。之后你循环5次给vec1[i]赋值,从i=1开始就属于越界访问内存了——这是未定义行为,可能导致数据混乱、程序崩溃,或者像你遇到的输出全0的情况。

同样,vec3{10}也是创建了一个只有单个元素「10」的vector,但合并两个5元素的vector需要10个位置的空间,直接用vec3.begin()作为merge的目标迭代器,会越界写入内存,同样触发未定义行为。

2. merge的目标容器没准备好

std::merge不会自动帮你扩展目标容器的大小,要么你提前把目标容器的size设好,要么用std::back_inserter让它自动往容器里插元素。


修正后的完整代码

第一种方式:提前设置好容器大小

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    // 用()初始化,创建大小为5的vector,元素默认初始化为0
    std::vector<int> vec1(5);
    std::vector<int> vec2(5);
    // 创建大小为10的vector,用来装合并后的结果
    std::vector<int> vec3(10);

    for(int i = 0; i < 5; i++){ 
        vec1[i] = 2 * i; 
    }
    for(int i = 0; i < 5 ; i++){ 
        vec2[i] = 2 + 2 * i; 
    }
    // 其实这里vec1和vec2已经是有序的,sort可以省略,保留也不影响
    std::sort(vec1.begin(), vec1.end());
    std::sort(vec2.begin(), vec2.end());

    // 合并到vec3,此时vec3有足够空间
    std::merge(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), vec3.begin());

    for(auto itr = vec3.begin(); itr != vec3.end(); ++itr){ 
        std::cout << " " << *itr; 
    }
    return 0;
}

第二种更灵活的方式:用back_inserter自动插入(不需要提前设置size)

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator> // 要包含这个头文件才能用back_inserter

int main() {
    std::vector<int> vec1(5);
    std::vector<int> vec2(5);
    std::vector<int> vec3;
    vec3.reserve(10); // 提前预留10个元素的空间,优化性能(可选)

    for(int i = 0; i < 5; i++){ 
        vec1[i] = 2 * i; 
    }
    for(int i = 0; i < 5 ; i++){ 
        vec2[i] = 2 + 2 * i; 
    }

    std::merge(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), std::back_inserter(vec3));

    for(auto num : vec3){ 
        std::cout << " " << num; 
    }
    return 0;
}

额外小提示

  • 记住vector<int> v(n)和vector<int> v{n}的区别:前者是创建n个默认值元素的vector,后者是创建包含单个元素n的vector。
  • 调试的时候可以用vec.at(i)代替vec[i],如果越界会直接抛出异常,帮你快速定位问题,而不是默默搞坏内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:43:10