Очередь FIFO (или стек) реализованный на диске, не врезается (предпочтительно в C++) [закрытый]

Нужно отметить также, что это, конечно, только найдет все те подклассы, которые существуют на Вашем текущем пути к классу. По-видимому, это хорошо для того, на что Вы в настоящее время смотрите, и возможности - Вы, действительно рассматривал это, но если Вы имеете в какой-либо точке, выпущенной не - final класс в дикую местность (для переменных уровней "диких") затем, совершенно выполнимо, что кто-то еще записал их собственный подкласс, о котором Вы не будете знать.

Таким образом, если Вы, оказалось, желали видеть все подклассы, потому что Вы хотите внести изменение и собираетесь видеть, как оно влияет на поведение подклассов - затем, принимают во внимание подклассы, которые Вы не видите. Идеально все Ваши незакрытые методы и сам класс должны быть хорошо зарегистрированы; внесите изменения согласно этой документации, не изменяя семантику methods/non-private полей, и Ваши изменения должны быть назад совместимыми для любого подкласса, который следовал Вашему определению суперкласса, по крайней мере.

6
задан yeyeyerman 29 April 2013 в 15:14
поделиться

4 ответа

Вы можете посмотреть STXXL :

«Ядро STXXL - это реализация стандартной библиотеки шаблонов C ++ STL для внешней памяти (вне -core) вычислений, то есть STXXL реализует контейнеры и алгоритмы, которые могут обрабатывать огромные объемы данных, которые помещаются только на диски »

10
ответ дан 8 December 2019 в 18:38
поделиться

Вы можете изучить библиотеку STLXX . Он содержит дисковую приоритетную очередь, использующую модель « Sequence Heap », описанную Питером Сандерсом.

2
ответ дан 8 December 2019 в 18:38
поделиться

Безумная идея: реализовать класс распределителя, который считывает / записывает в файл на диске и из него и передает его в STL deque или очередь или все, что вам подходит.

1
ответ дан 8 December 2019 в 18:38
поделиться

Расскажите нам о данных. Каждый предмет большой или маленький? Это фиксированный размер или сильно изменчивый? Проблема с дисковым хранилищем заключается в том, что по мере того, как элементы становятся более разнообразными по размеру, проблема начинает напоминать проблему с базой данных. В этом случае вам, вероятно, следует изучить что-то вроде базы данных sqllite в качестве резервного хранилища для вашей очереди. Затем вы можете просто использовать SQL для извлечения первой записи.

Если данные действительно большие, вы можете просто сохранить каждый объект в файловой системе, используя постоянно увеличивающееся имя файла. Тогда вам даже не нужно хранить очередь в памяти. Дата файла становится вашим порядком FIFO. Просто возьмите самый старый файл в каталоге, чтобы вытащить первый элемент из «стека».

Наконец, если данных мало и много, вы можете подумать о переопределении Распределителя std :: list или std :: deque. Возможно, удастся скрыть ввод-вывод файла в классе Allocator. У меня нет простого решения для небольшого и большого количества данных.

0
ответ дан 8 December 2019 в 18:38
поделиться