值错误的二维矢量

2d Vector with wrong values

本文关键字:二维 错误      更新时间:2023-10-16

我在研究STL,然后我想"我会做一个2d数组!"但不管怎样。。。

a编码如下:

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

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

几个问题:

您只是在调整第一个向量的大小。你需要调整所有的大小。

相反,可以考虑使用以下内容:

vector< vector<int> > vetor (10, vector<int>(10, 0));

这将创建一个10 x 10的矢量。

向量有一个构造函数(size_t-size,t default_value),它用值default_value的size元素构造向量。

如果矢量的大小在compiletime是已知的并且不会改变,那么您也可以使用std::数组来略微提高性能。

其次,使用vector::size()而不是vector:

for(int i = 0; i < vetor.size(); i++){
    for(int h = 0; h < vetor[0].size(); h++){
        vetor[i][h] = h;
    }
}

当您调整否决器[0]的大小。resize(10)时,您只调整了第一个元素的大小。

您需要:

vetor[0].resize(10)
vetor[1].resize(10)
vetor[2].resize(10)
.
.
vetor[10].resize(10)

做你想做的事。

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