Я использую библиотеку Boost версии 1.44.0 и c ++ с gcc 4.0.
Я создал ublas::compressed_matrix<double>
и заполнил его, используя метод insert_element(index1, index2, value)
.После этого я перебираю элементы матрицы и распечатываю ненулевые элементы.Я использую следующий код для итерации (обратите внимание, что i1_t
и i2_t
равны typedef boost::numeric::ublas::compressed_matrix<double>::iterator
):
for (i1_t i1 = matrix->begin1(); i1 != matrix->end1(); i1++) {
for (i2_t i2 = matrix->begin2(); i2 != matrix->end2(); i2++) {
cout<<"("<<i2.index1()<<","<<i2.index2()<<")="<<*i2<<" ";
}
cout<<endl;
}
Или альтернативно следующее:
for (i1_t i1 = matrix->begin1(); i1 != matrix->end1(); i1++) {
cout<<i1.index1()<<" -> ";
for (i2_t i2 = matrix->begin2(); i2 != matrix->end2(); i2++) {
cout<<i2.index2()<<" ("<<*i2<<") ";
}
cout<<endl;
}
Конечно, обаиз них делают почти то же самое.Код следует предложениям, представленным в другом сообщении в stackoverflow: итерации по ненулевым элементам
Однако при выполнении кода я получаю, что только первые несколько элементов правильно напечатаны (вв частности, это относится к первым шести записям), пока я не получу следующую ошибку:
Check failed in file /opt/local/include/boost/numeric/ublas/matrix_sparse.hpp at line 3109:
p
terminate called after throwing an instance of 'boost::numeric::ublas::bad_index'
what(): bad index
Однако все элементы, похоже, правильно вставлены в матрицу.Мне интересно, что происходит, почему я получаю эту ошибку и что она означает?
Большое спасибо.