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

C++楼梯状二维Vector创建问题:代码输出空白行原因排查

楼梯状二维vector输出空白的问题排查与修复

嘿,我来帮你看看这个问题!你想要生成一个包含10行、列数逐行递增的二维vector,期望的输出效果是:

  • 第一行:1
  • 第二行:1 2
  • ...
  • 第十行:1 2 3 ... 10

但你编写的代码运行后却输出了10行空白内容,先看看你的原代码:

#include <iostream>
#include <vector>
using namespace std;
int main(){
    int j=1;
    vector<vector<int>> vec(10, vector<int>(0));
    for(auto vctr:vec){
        for(int i = 0;i<j;i++){
            vctr.push_back(i+1);
        }
        j++;
    }
    for(auto vctr:vec){
        for(auto it:vctr){
            cout << it << " ";
        }
        cout << endl;
    }
}

问题核心

问题出在第一个范围for循环的变量声明上:auto vctr:vec是值拷贝的写法——每次循环都会把vec里的子vector复制一份到临时变量vctr中,你在循环里给vctr添加元素,修改的只是这个临时拷贝,原容器vec里的元素根本没被改动。所以最后输出时,vec里的所有子vector还是初始的空状态,自然就输出空白了。

修复方案

只需要把第一个for循环的变量改成引用形式,让vctr直接指向原容器里的元素,这样所有修改操作都会直接作用在vec上:

#include <iostream>
#include <vector>
using namespace std;
int main(){
    int j=1;
    vector<vector<int>> vec(10, vector<int>(0));
    // 这里添加&,使用引用直接操作原元素
    for(auto& vctr:vec){
        for(int i = 0;i<j;i++){
            vctr.push_back(i+1);
        }
        j++;
    }
    // 输出时如果只是读取,值拷贝没问题,也可以用const auto&提升效率
    for(auto vctr:vec){
        for(auto it:vctr){
            cout << it << " ";
        }
        cout << endl;
    }
}

修改后运行代码,就能得到你期望的楼梯状输出啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:17:49