这段代码有什么问题?

时间:2013-11-28 20:49:09

标签: c++

我正在尝试使用类似维度的单位矩阵来扩充矩阵,为什么这段代码不起作用?

它不断给出错误'向量下标超出范围'

for (i = 0; i < matrix.size(); i++)
    for (j = matrix.size(); j < 2 * matrix.size(); j++)
        if (i == j % matrix.size())
            matrix[i][j] = 1;
        else
            matrix[i][j] = 0;

2 个答案:

答案 0 :(得分:2)

对于方形矩阵,我认为你错误地初始化了j?

for (i = 0; i < matrix.size(); i++)
    for (j = 0; j < matrix.size(); j++)
       if (i == j)
          matrix[i][j] = 1;
       else
          matrix[i][j] = 0;

编辑:所以为了扩充,我认为以下内容可以扩展行的长度 (http://en.wikipedia.org/wiki/Augmented_matrix

for (i = 0; i < matrix.size(); i++)
    matrix[i].resize(2 * matrix.size())
    for (j = matrix.size(); j < 2 * matrix.size(); j++)
        if (i == j % matrix.size())
           matrix[i][j] = 1;
        else
           matrix[i][j] = 0;

答案 1 :(得分:1)

您必须先调整每个行向量(或行数组)的大小。否则,您尝试访问的单元格将超出行范围(并且您会收到相应的错误)。

您可以matrix[row].resize(2*matrix[row].size());执行此操作,其中row = 0 .. matrix.size()-1