Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
SparseMatrix<double> mat(rows,cols);
for (int k=0; k<mat.outerSize(); ++k)
for (SparseMatrix<double>::InnerIterator it(mat,k); it; ++it)
{
it.value();
it.row(); // row index
it.col(); // col index (here it is equal to k)
it.index(); // inner index, here it is equal to it.row()
}
Random access to the elements of a sparse object can be done through the coeffRef(i,j) function. However, this function involves a quite expensive binary search. In most cases, one only wants to iterate over the non-zeros elements. This is achieved by a standard loop over the outer dimension, and then by iterating over the non-zeros of the current inner vector via an InnerIterator. Thus, the non-zero entries have to be visited in the same order than the storage order.
Не говнокод, а говнодоки, которые забыли уточнить, что код из их примера иногда итерирует и по нулевым элементам тоже. Поскольку у меня в неко-й матрице лежали одни единички, я типа: а не буду проверять значения. Конец немного предсказуем.
Т. е. матрица представлена полным массивом колонок, а каждая колонка — списком ненулевых элементов?
А что будет, если какая-то колонка полностью состоит из нулей? Внутренний список будет пустым или будет рандомно наполнен некоторыми нулевыми элементами?
Хахаха, ит мат ка
А почему итерирует? Потому что в элемент пописали?
Т. е. матрица представлена полным массивом колонок, а каждая колонка — списком ненулевых элементов?
А что будет, если какая-то колонка полностью состоит из нулей? Внутренний список будет пустым или будет рандомно наполнен некоторыми нулевыми элементами?