У меня есть Eigen::MatrixXi, который обновляется в простом цикле, и в соответствии с некоторой переменной diff_neighbors_total содержимое матрицы может меняться, и я хочу преобразовать / сохранить мои собственные матрицы следующим образом: Когда diff_neighbors_total = 3 это должен хранить всю матрицу в третьем элементе списка и т. д. Я пытаюсь использовать std::list, но поскольку он находится в цикле, список элементов списка изменяется, и я получаю список больше обычного. Вот соответствующий код в R-языке (который я пытаюсь преобразовать в C ++):
list.matrix.constraint[[(diffNeighbors.total+1)]] <-
list.matrix.constraint[[(diffNeighbors.total+1)]] +
matrix.correspondance.intermediate
Желаемый вывод для этого конкретного случая:
0
0
0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 1 0
0 0 0 1 0 0
1 0 0 0 0 0
0 0 0 0 0 0
Вот код и выход:
std::list<Eigen::MatrixXi> list_matrix_constraint;
// for each row
for (int isomorp_row=0; isomorp_row<sub_count; isomorp_row++)
{
// Some code here
int diff_neighbors_total = 0; //for filter2
// for each column in corresponding row
for(int isomorp_col=0; isomorp_col < getsubG.row(0).size(); isomorp_col++)
{
// ...
// Some code here
correspondance_matrix_intermediate.setZero();
for(int j=0;j<subG.size();j++)
{
correspondance_matrix_intermediate(subG(j),j) = correspondance_matrix_intermediate(subG(j),j) + 1;
}
std::list<Eigen::MatrixXi>::iterator it = list_matrix_constraint.begin();
// List i contains all subisomorphism with total edge difference of i
for (int i=0;i<diff_neighbors_total;i++)
{
//std::cout << "it: " << *it << std::endl;
list_matrix_constraint.insert(it,zero_matrix);
it++;
}
list_matrix_constraint.insert(++it,correspondance_matrix_intermediate);
//list_matrix_constraint.insert(it,*it);
} // end of row operations
std::cout << std::endl;
std::cout << std::endl;
std::cout << "List: " << std::endl;
for (std::list<Eigen::MatrixXi>::iterator it = list_matrix_constraint.begin(); it!= list_matrix_constraint.end(); it++)
{
std::cout << *it << std::endl;
}
// rest of main
Выход:
List:
0
0
0
0
0
0
0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 1 0 0 0
0 1 0 0 0 0
1 0 0 0 0 0
0 0 0 0 0 0
0
0
0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 1 0
0 0 0 1 0 0
1 0 0 0 0 0
0 0 0 0 0 0
0
0
0
...