2d矢量错误的值

时间:2012-03-20 23:18:13

标签: c++

我正在研究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

我的计划发生了什么?它没有打印正确的值!

1 个答案:

答案 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)

做你想做的事。

(换句话说,矢量向量中的每个向量具有可能不同的大小。它不是矩阵类。)