Я хочу сохранить большой вектор d-мерных точек (d фиксированный и маленький: < 10).Векторное хранилище в C++
Если я определяю Point
как vector<int>
, я думаю, что vector<Point>
будет хранить в каждой позиции указатель на точку.
Но если определить Point
как объект фиксированного размера, как: std::tuple<int,int,...,int>
или std::array<int, d>
, будет магазин программа все точки в непрерывной памяти или будет дополнительный уровень косвенности остаются?
Если ответ заключается в том, что массивы избегают дополнительной косвенности, может ли это оказать большое влияние на производительность (местонахождение эксплойта в кэше) при сканировании vector<Point>
?
стандартный вектор класс должен быть в значительной степени совместимы с массивами, что означает, что данные, которые он выделяет хранятся в непрерывном куске памяти, так же, как массив. Если у вас есть 'std :: vector', тогда весь объект 'Point' будет храниться смежно. Если в классе «Point» есть указатели (прямо или косвенно (например, когда у него есть вектор)), то не все данные будут сохранены. –
Да, я бы пошел маршрут кортежа или лучше, просто используйте обычную структуру C-стиля (я все еще нахожу кортеж, раздражающий использование, т. Е. Std :: get() на самом деле не все, что интуитивно понятно). –
Robinson