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 に答える