2

我对 C++ 很陌生,并且得到了一项仅使用 STL 容器制作矩阵的任务。我使用了向量(列)的向量(行)。我遇到的问题是在“写”操作中——我可能只使用基于迭代器的实现。问题很简单:它什么也没写。

我已经用一个填充了不同值的矩阵进行了测试,虽然迭代器最终恰好位于正确的位置,但它并没有改变值。

这是我的代码:

void write(matrix mat, int row, int col, int input)
{
    assert(row>=0 && col>=0);
    assert(row<=mat.R && col<=mat.C);

    //I set up the iterators.
    vector<vector<int> >::iterator rowit;
    vector<int>::iterator colit;
    rowit = mat.rows.begin();

    //I go to the row.
    for(int i = 0; i<row-1; ++i)
    {   
        ++rowit;
    }

    colit = rowit->begin();

    //I go to the column.
    for(int j = 0; j<col-1; ++j)
    {
        ++colit;
    }

    *colit = input; //Does nothing.
}

我在看什么?谢谢。

4

1 回答 1

1

matrix mat是值参数,它复制矩阵,因此您正在写入副本。

您应该通过引用传递矩阵,例如matrix & mat.


但是等等...您每次都将矩阵作为第一个参数传递,这是一个不好的迹象!

这通常表明应该将参数转换为可以在其上运行方法的对象;这样,您根本不需要传递参数。Matrix所以,改为创建一个类。


请注意,有std::vector::operator[]

所以,你可以这样做:

void write(matrix & mat, int row, int col, int input)
{
    assert(row>=0 && col>=0);
    assert(row<=mat.R && col<=mat.C);

    mat[row][col] = input;
}
于 2012-12-01T22:41:57.127 回答