В моем текущем проекте я имею дело с многомерной структурой данных. Основной файл хранится последовательно (т.е. Один огромный массив, вектор векторов нет). Алгоритмы, использующие эти структуры данных, должны знать размер отдельных измерений.
Мне интересно, был ли определен многомерный класс итератора где-то в общем виде и если есть какие-либо стандарты или предпочтительные способы решения этой проблемы.
В настоящий момент я просто использую линейный итератор с некоторыми дополнительными методами, которые возвращают размер каждого измерения и количество измерений в первой части. Причина, по которой мне это не нравится, заключается в том, что я не могу использовать std:: distance разумным способом (например, только возвращает расстояние всей структуры, но не для каждого измерения отдельно).
По большей части я получаю доступ к структуре данных линейным образом (первое измерение начинается до конца → следующее измерение +... и т.д.), но было бы полезно знать, когда одно измерение "заканчивается". Я не знаю, как это сделать с помощью оператора *(), оператора +() и оператора ==() в таком подходе.
Подход вектора векторов неблагоприятен, потому что я не хочу разделить файл. Также алгоритмы должны работать на структуре с различной размерностью и поэтому трудно обобщить (или, может быть, есть способ?).
У Boost multi_array есть те же проблемы (несколько "уровней" итераторов).
Надеюсь, это не слишком расплывчато или абстрактно. Любой намек в правильном направлении был бы оценен.
Я снова искал решение и пересматривал boost:: multi_array. Как оказалось, можно генерировать подвыборы для данных с ними, но в то же время также взять прямой итератор на верхнем уровне и неявно "сгладить" структуру данных. Однако реализованные версии multi_array не соответствуют моим потребностям, поэтому я, вероятно, сам реализую один (который обрабатывает кеширование файлов в фоновом режиме), который совместим с другими multi_arrays.
Я обновлю его снова после выполнения.