Как напечатать индекс массива по вектору измерений? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть вопрос для расчета индекса и значения индекса в соответствии с вектором измерений.

Например, давая buf массива и вектор измерений. Например, вектор равен { 2, 3, 4 } означает, что количество элементов в первом измерении равно 2, количество элементов во втором измерении равно 3, третье измерение равно 4.

Выход is:

buf[0][0][0] = *
buf[0][0][1] = *
buf[0][0][2] = *
...
buf[1][2][2] = *
buf[1][2][3] = *

и * это значение в буфере.

Есть ли какие-либо решения для этого? Думаю, ключевой момент заключается в том, как справиться с размером вектора измерений.

Благодаря вашей помощи.

1 Ответ

0 голосов
/ 16 апреля 2020

Если элементы массива

int buf[X][Y][Z]

расположены последовательно в памяти без пробелов, вы можете вычислить позицию с помощью

&buf[x][y][z] == (int *) buf + z + y * Z + x * Y * Z

Следующий код работает на большинстве систем и компиляторов. I работал (я не проверял все), но я не знаю, является ли это неопределенным или неопределенным поведением.

#include <iostream>

int main() {
    int buf[2][2][2] = {{ {{1}, {2}}, {{3}, {4}} }, { {{5}, {6}}, {{7}, {8}} }};
    std::cout << &buf[0][1][1] << '\n';
    std::cout << (int *) buf + 0 * 2 * 2 + 1 * 2 + 1 << '\n';
}

Может быть, это поможет вам узнать, что buf[x][y][z] является синтаксическим сахаром для *(*(*(buf + x) + y) + z)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...