Я пытаюсь создать разреженную матрицу из Триплетов.Каким-то образом приведенная ниже программа либо печатает матрицу, содержащую только нули, либо я получаю
^ [[Bterminate, вызываемый после бросания экземпляра 'std :: bad_alloc'
what (): std ::bad_alloc Прервано.
Когда я добавляю код к закомментированной кнопке, он иногда начинает работать, а иногда я снова получаю только нули.
Я не понимаю этого поведения.Кажется, это связано с памятью, но почему распечатка материала (после комментирования в нижнем коде) должна изменить то, что происходит с вершиной?
Что-то не так с моим подходом?Или что-то не так с моей настройкой?Я только что скачал последнюю стабильную версию с http://eigen.tuxfamily.org.
#include <iostream>
#include <Eigen/SparseCore>
#include <Eigen/Dense>
int main()
{
int n = 10;
std::vector<Eigen::Triplet<double> > ijv;
for(int i; i < n; i++)
{
ijv.push_back(Eigen::Triplet<double>(i,i,1));
if(i < n-1)
{
ijv.push_back(Eigen::Triplet<double>(i+1,i,-0.9));
}
}
Eigen::SparseMatrix<double> X(n,n);
X.setFromTriplets(ijv.begin(), ijv.end());
std::cout << Eigen::MatrixXd(X) << std::endl;
/* std::cout << "Row\tCol\tVal" <<std::endl;
for (int k=0; k < X.outerSize(); ++k)
{
for (Eigen::SparseMatrix<double>::InnerIterator it(X,k); it; ++it)
{
std::cout << it.row() << "\t"; // row index
std::cout << it.col() << "\t"; // col index (here it is equal to k)
std::cout << it.value() << std::endl;
}
}
*/
}