如何在矩阵向量的所有单元格中放置NULL?

时间:2010-09-20 15:35:26

标签: c++ vector

我正在尝试使用NULL值初始化矩阵的所有单元格,但这里有些错误 代码:

vector<vector<Distance*> > distanceMatrix;  
    for (int i = 0; i < 7 ; i++)
        for (int j = 0; j < 7 ; j++)
            distanceMatrix[i][j].push_back(NULL);  

我打赌这是愚蠢的,谢谢你的帮助。

2 个答案:

答案 0 :(得分:9)

来自std::vector reference page

可以使用其中的某些值构建向量。

您可以尝试:

vector<vector<Distance*> > distanceMatrix(7, vector<Distance*>(7, NULL));

另外,关于你的问题:

vector<vector<Distance*> > distanceMatrix;  
    for (int i = 0; i < 7 ; i++)
        for (int j = 0; j < 7 ; j++)
            distanceMatrix[i][j].push_back(NULL); //1

当您首次到达//1代码时,distanceMatrix[i]会解析为distanceMatrix[0],但您没有调用distanceMatrix.push_back(vector<Distance*>()),因此您指的是未初始化的单元格。

要更正代码:

vector<Distance*> vec;

for (int j = 0; j < 7 ; j++)
  vec.push_back(NULL);

vector<vector<Distance*> > distanceMatrix;

for (int i = 0; i < 7 ; i++)
{
    distanceMatrix.push_back(vec);
}

这仍然比我的第一个建议差得多。

答案 1 :(得分:1)

由于矩阵一开始是空的,你需要push_back每个值和每一行,而不是取决于它在矩阵中的位置:

vector<Distance*> row;
for(int j=0; j < 7; j++)
    row.push_back(NULL);

vector<vector<Distance*> > distanceMatrix; 
for(int i=0; i < 7; i++)
    distanceMatrix.push_back(row);