Ксюнька Ксю
Ксюнька Ксю

Как быть с многоразмерными массивами? Рекурсия?

Допустим, надо "пройтись по всем элементам массива (матрицы)
Если массив 1-мерный - цикл по i.
Если 2-мерный - вложенные циклы по i и j
Если 3-мерный - вложенные циклы по i, j, k
А если многомерный?
Так и вкладывать, используя однотипный код?
Ну, это ладно. А если заранее не известно, скольки мерный массив, тогда как быть?

Что-то мне подсказывает, что рекурсия поможет.
Но я никак не могу сообразить, как это реализовать.

НЛ
Никита Лутаев

#include
#include
using namespace std;

template < class T > class Narray
{
int S;
int N;
int* r;
int* e;
T* m;
public:
Narray(int aN,int* ar,int(*p)(int),int x); // N - число измерений, массив количества элементов для каждого измерения
~Narray() { delete r,m,e; };
void print(); //вывод содержимого массива
T& operator[](int j) { return m[j]; }

Narray< T >& operator=(const Narray< T >&); // операция присвоения

Narray< T > operator+(Narray< T >& a);
};

template < class T > Narray< T >::Narray(int aN,int* ar,int(*p)(int),int x):N(aN)
{ int j,l,s;
r=new T[N];
e=new T[N];
for(S=1,j=0;j-N;S*=r[j++]=ar[j]);
m=new T[ S ];
for(e[0]=l=1;l-N;e[l++]=s) for(s=1,j=N-1;j>=N-l;s*=r[j--]);
for(j=0;j-S;m[j++]=p(x));
}

template < class T > void Narray< T >::print()
{
int j,l;
for(l=0;l-S;cout << m[l++] << '\t') for(j=1;j-N;) if(l % e[j++]==0) printf("\n");
cout << endl;
}

template< class T > Narray< T >& Narray< T >::operator=(const Narray< T >& r)
{ int j;
if(this!=&r) for(j=0;j-S;j++) m[j]=r.m[j];
return *this;
}

template < class T > Narray< T > Narray< T >::operator+(Narray< T >& a)
{ int j;
Narray< T > R(N,r,num,0);
for(j=0;j-S;j++) R[j]=m[j]+a.m[j];
return R;
}

int init(int i)
{
return rand() % i;
}

int num(int i)
{
return i;
}

#define K 3 // для трёхмерного массива
#define L 2 // для двухмерного массива
int main()
{
srand(time(NULL));
{
int r[K]={2,3,4};
Narray Y(K,r,num,0); Y.print();
Narray M(K,r,init,5); M.print();
Narray N(K,r,init,4); N.print();
Y=M+N;
Y.print();
Y=M;
Y.print();
}
{
int r[L]={2,3};
Narray Y(L,r,num,0); Y.print();
Narray M(L,r,init,5); M.print();
Narray N(L,r,init,4); N.print();
Y=M+N;
Y.print();
Y=M;
Y.print();
}
return 0;
}

СГ
Станислав Горяев

Функция проходится по массиву и в самом начале проверяет, является ли элемент массивом или простым объектом.

Ел
Елена

Ни на одном известном мне языке невозможно инициализировать массив, количество измерений которого неизвестно.

Похожие вопросы
Помогите освоить рекурсию
Задача по рекурсии. С++
Программирование. Паскаль. Рекурсия.
паскаль рекурсия вычислить
Ктото может помоч с Рекурсией?
рекурсия pascal вычисление степени
рекурсия pascal дерево вызовов
Разработать программу для вычисления произведения элементов одномерного числового массива, рекурсия Помогите пожалуйста)
Pascal Как с помощью вектора иверсии найти номер перестановки, используя массивы и рекурсию?
Покажите пример рекурсии в Ruby.