Эффективное многомерное хранилище данных в C ++ - PullRequest
0 голосов
/ 27 января 2011

Я пытаюсь написать программу на C ++, которая должна хранить и корректировать данные в трехмерном массиве.Размер задается пользователем и не изменяется на протяжении всего цикла, и мне не нужно выполнять какие-либо сложные матричные операции с ним.Мне просто нужно оптимизировать его, чтобы установить и получить из заданных трехмерных координат (я делаю довольно много итераций для всех элементов, и это большой массив).Каков наилучший способ определения этого массива?Вектор вектора вектора?Массивы векторов?CvMat / IplImage с несколькими каналами?Должен ли я даже сохранить его как 3D или просто превратить его в один очень длинный вектор с чередованием и соответственно рассчитать индексы?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Я бы выбрал ваш последний вариант, один большой массив с преобразованными индексами.Если все, что вам нужно, - это читать и записывать известные индексы, это, вероятно, самая эффективная структура, как с точки зрения хранения, так и скорости.Вы также можете заключить это в класс и перегрузить operator (), чтобы упростить доступ к трехмерным координатам, например.вы могли бы написать a(1,2,3) = 10;, и перегруженный оператор мог бы преобразовать трехмерные координаты в линейный индекс.Итерирование по такому массиву также будет довольно простым, поскольку есть только одно измерение.

0 голосов
/ 27 января 2011

Это зависит от того, что вы подразумеваете под эффективным, но смотрели ли вы на КД ?

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