Я написал этот метод, чтобы найти минор разреженной матрицы:
SpMatrixVec SparseMatrix::minor(SpMatrixVec matrix, int col) const{
SpMatrixVec::iterator it = matrix.begin();
int currRow = it->getRow();
int currCol = col;
while(it != matrix.end()) {
if(it->getRow() == currRow || it->getCol() == currCol){
matrix.erase(it);
}
// if we have deleted an element in the array, it doesn't advance the
// iterator and size() will be decreased by one.
else{
it++;
}
}
// now, we alter the cells of the minor matrix to be of proper coordinates.
// this is necessary for sign computation (+/-) in the determinant recursive
// formula of detHelper(), since the minor matrix non-zero elements are now
// in different coordinates. The row is always decreased by one, since we
// work witht he first line, and the col is decreased by one if the element
// was located after 'col' (which this function receives as a parameter).
//change the cells of the minor to their proper coordinates.
for(it = matrix.begin(); it != matrix.end(); it++){
it->setRow(it->getRow()-1);
int newY;
newY = (it->getCol() > col) ? it->getCol() + 1 : it->getCol();
it->setCol(newY);
}
return matrix;
}
Теперь я, вероятно, что-то делаю не так, потому что при достижении второго целого числа цикла while
программасбои.Основная идея состояла в том, чтобы пройтись по вектору и посмотреть, является ли это соответствующей координатой, и если да, то удалить ее.Я увеличиваю значение итератора только в том случае, если не было удаления (и в этом случае вектор должен обновить итератор, чтобы он указывал на следующий элемент ... если только я не ошибся).
В чем проблема?
Большое спасибо.