1. C++ / Говнокод #29176

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    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.

    Запостил: CHayT, 03 Сентября 2025

    Комментарии (4) RSS

    • Не говнокод, а говнодоки, которые забыли уточнить, что код из их примера иногда итерирует и по нулевым элементам тоже. Поскольку у меня в неко-й матрице лежали одни единички, я типа: а не буду проверять значения. Конец немного предсказуем.
      Ответить
      • Типа он гарантирует итерацию по всем ненулевым, но может случайно захватить и нули тоже?
        Ответить
    • > it(mat, k)
      Хахаха, ит мат ка

      А почему итерирует? Потому что в элемент пописали?
      Ответить
    • // col index (here it is equal to k)

      Т. е. матрица представлена полным массивом колонок, а каждая колонка — списком ненулевых элементов?

      А что будет, если какая-то колонка полностью состоит из нулей? Внутренний список будет пустым или будет рандомно наполнен некоторыми нулевыми элементами?
      Ответить

    Добавить комментарий