@ Jeff
Я действительно думаю, что это интересный вопрос. Я не уверен, насколько это полезно, но это правильный вопрос.
@ Ed
Можете ли вы предоставить немного больше информации по этому вопросу? Вы сказали, что размерность массива динамическая, но динамично ли количество элементов?
РЕДАКТИРОВАТЬ: Я собираюсь попытаться ответить на вопрос в любом случае. Я не могу дать вам код с ног на голову (потребуется некоторое время, чтобы сделать это правильно без компилятора здесь на этом ПК), но я могу указать вам правильное направление ...
Давайте использовать 8 измерений (0-7) с индексами от 0 до 3 в качестве примера. Вы заботитесь только о 1,2 и 6. Это означает, что у вас есть два массива. Сначала array_care[4][4][4]
для 1,2 и 6. array_care[4][4][4]
будет содержать конечный результат.
Далее мы хотим выполнить итерацию очень специфическим способом. У нас есть массив input[4][4][4][4][4][4][4][4]
для анализа, и мы заботимся о измерениях 1, 2 и 6.
Нам нужно определить несколько временных индексов:
int dim[8] = {0,0,0,0,0,0,0,0};
Нам также нужно сохранить порядок, в котором мы хотим увеличить индексы:
int increase_index_order[8] = {7,5,4,3,0,6,2,1};
int i = 0;
Этот заказ важен для выполнения того, что вы просили.
Определить флаг завершения:
bool terminate=false;
Теперь мы можем создать наш цикл:
while (terminate)
{
array_care[dim[1]][dim[2]][dim[6]] += input[dim[0]][dim[1]][dim[2]][dim[3]][dim[4]][dim[5]][dim[6]][dim[7]];
while ((dim[increase_index_order[i]] = 3) && (i < 8))
{
dim[increase_index_order[i]]=0;
i++;
}
if (i < 8) {
dim[increase_index_order[i]]++; i=0;
} else {
terminate=true;
}
}
Это должно работать для 8 измерений, заботясь о 3 измерениях. Потребовалось бы немного больше времени, чтобы сделать его динамичным, а у меня нет времени. Надеюсь это поможет. Я прошу прощения, но я еще не выучил разметки кода. (