我正在研究STL,然后我想“我会做一个2D阵列!”但不管......
编码:
vector< vector<int> > vetor;
vetor.resize(10);
vetor[0].resize(10);
for(int i = 0; i < vetor.capacity(); i++){
for(int h = 0; h < vetor[0].capacity();h++){
vetor[i][h] = h;
}
}
直到这里,好的。但是当我尝试显示数组值时,请使用:
for(int i = 0; i < vetor.capacity(); i++){
cout << "LINE " << i << ": ";
for(int h = 0; h < vetor[0].capacity();h++){
cout << vetor[i][h] <<" ";
}
cout << "\n";
}
结果真是错误:
LINE 0: 4 5 6 7 8 9 6 7 8 9
LINE 1: 0 1 2 3 0 1 2 3 0 1
LINE 2: 0 1 2 3 0 1 2 3 0 1
LINE 3: 0 1 2 3 0 1 2 3 0 1
LINE 4: 0 1 2 3 0 1 2 3 0 1
LINE 5: 0 1 2 3 0 1 2 3 0 1
LINE 6: 0 1 2 3 0 1 2 3 0 1
LINE 7: 0 1 2 3 0 1 2 3 0 1
LINE 8: 0 1 2 3 0 1 2 3 4 5
LINE 9: 0 1 2 3 4 5 6 7 8 9
我的计划发生了什么?它没有打印正确的值!
答案 0 :(得分:3)
几个问题:
您只是调整第一个矢量的大小。你需要调整所有这些。
相反,请考虑使用此:
vector< vector<int> > vetor (10, vector<int>(10, 0));
这将创建一个10 x 10矢量矢量。
vector有一个构造函数(size_t size,T default_value),用于构造值为default_value的size元素的向量。
如果向量的大小在编译时是已知的并且不会改变,那么你也可以使用std :: array来获得轻微的性能提升。
其次使用vector :: size()而不是vector :: capacity()来确定向量的大小(容量指的是后备存储,除了优化之外可以在很大程度上被忽略)
for(int i = 0; i < vetor.size(); i++){
for(int h = 0; h < vetor[0].size(); h++){
vetor[i][h] = h;
}
}
当您调整vetor [0] .resize(10)的大小时,您只是调整第一个元素的大小。
你需要:
vetor[0].resize(10)
vetor[1].resize(10)
vetor[2].resize(10)
.
.
vetor[10].resize(10)
做你想做的事。
(换句话说,矢量向量中的每个向量具有可能不同的大小。它不是矩阵类。)