динамични имена на матрици в C++ (библиотека Armadillo)

Искам да генерирам k различни произволни матрици в C++ (с библиотека Armadillo), където n не е фиксирано в началото и е вход в моята функция. В Armadillo е лесно да генерирате произволни матрици, като използвате следния код в рамките на for цикъл:

 mat A = randu<mat>(n,n);

Но тъй като имам нужда от тях в следващите стъпки, трябва да им присвоя динамични имена или индекси, напр. A1, A2, ... . Искам да знам кой метод е най-добрият за този случай, освен използването на указателите?


person Jmath    schedule 18.04.2017    source източник
comment
Какво ще кажете за контейнер като std::vector<mat>?   -  person aschepler    schedule 18.04.2017
comment
Наистина няма начин да направите това, ще трябва да използвате контейнер. Тъй като не знаете броя на матриците, които ще имате, векторът вероятно е най-добрият ви вариант   -  person Nic    schedule 18.04.2017
comment
@Nic бихте ли могли да споменете как мога да дефинирам своя for цикъл в този случай, като използвам вектора?   -  person Jmath    schedule 18.04.2017
comment
Не мисля, че кодовият фрагмент наистина ще помогне, бих препоръчал да разгледате урок за вектори   -  person Nic    schedule 18.04.2017
comment
@aschepler благодаря. работи в моя случай.   -  person Jmath    schedule 18.04.2017
comment
@Nic Използвах вектори и работи добре в моя случай. Благодаря.   -  person Jmath    schedule 18.04.2017


Отговори (1)


Може да е по-удобно (и ефективно, но не е тествано) вместо това да използвате куб броненосец:

cube A = randu<cube>(n,n,k);

След това една единствена матрица в този куб ще бъде достъпна като A.slice(i) с 0 ≤ i ≤ k-1. Точно както матриците, кубовете могат да се преоразмеряват по време на изпълнение, така че можете динамично да променяте своите n и k. Можете дори да запазите стари стойности, като използвате A.resize(n',n',k')

person laolux    schedule 27.04.2017