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
相关产品推荐
相关产品推荐

