c++中的楼梯2d向量



我试图创建一个像2d向量一样的阶梯,有10行和变量列,像这样:

1
1 2
1 2 3
.
.
.
1 2 3 4 5 6 7 8 9 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& vectr:vec)(注意引用),否则您将遍历vector的副本。

auto不推导引用,导致循环变量创建副本而不是引用现有的vector元素。添加&以确保循环修改vector<vector<int>>的元素(并避免在第二个循环中进行不必要的复制):

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 const& vctr : vec) {
for (auto it : vctr) {
cout << it << " ";
}
cout << endl;
}
}

最新更新