I’m pretty new to C++ and got an assignment to make a matrix using only STL containers. I’ve used a vector (rows) of vectors (columns). The problem I’m having is in the ‘write’ operation – for which I may only use an iterator-based implementation. Problem is, quite simply: it writes nothing.
I’ve tested with a matrix filled with different values, and while the iterator ends up on exactly the right spot, it doesn’t change the value.
Here’s my code:
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.
}
What am I overlooking?
Thanks.
matrix matis a parameter by value, it copies the matrix and hence you are writing to a copy.You should pass the matrix by reference instead, like
matrix & mat.But wait… You are passing the matrix every time as the first parameter, this is a bad sign!
This usually indicates that the parameter should be turned into an object on which you can run the methods; that way, you don’t need to pass the parameter at all. So, create a
Matrixclass instead.Please note that there is std::vector::operator[].
So, you could just do it like this: