У меня есть целая куча объектов определенного типа, каждый из которых может выделить deque для хранения других объектов того же типа. Я использую deque, потому что мне нужен быстрый доступ на обоих концах, и потому что любой конкретный объект может ссылаться на многие другие объекты.
Однако вполне вероятно, что многие или даже большинство объектов ссылаются на очень мало других объектов. В этом случае использование памяти deque довольно велико. Реализация, которую я использую, выделяет 4096 байт сразу, как только я делаю самый первый push_back (). Каждый элемент в деке занимает всего 8 байтов. Это много потраченного впустую пространства, особенно потому, что я делаю многие из этих объектов, и, следовательно, многие из этих заявок.
В то же время мне в значительной степени нужна дека (или что-то подобное), потому что, как я уже сказал, любой конкретный объект может фактически ссылаться на многие другие объекты, несмотря на то, что большинство объектов ссылаются на очень немного других объектов.
Моей первой мыслью было использование Capacity () и Reserve () для самостоятельного увеличения deque, но мой компилятор сообщил мне, что в deque таких функций нет.
Итак, я подумал, возможно, написать класс с интерфейсом в стиле deque, лежащим в основе вектора и deque, с вектором, используемым до (скажем) шестнадцати элементов, которые существуют, после чего вектор отбрасывается и с этого момента используется deque.
Поскольку вектор используется только при небольшом количестве элементов, на самом деле не должно иметь большого значения то, что push_front () и pop_front () будут неэффективными с точки зрения скорости, и так как я могу контролировать вектор с Capacity () и Reserve (), это не должно иметь большого значения, поскольку deque использует много памяти, когда существует больше элементов.
Но, перед тем как катить свой собственный класс, я хотел проверить, существует ли что-то подобное. Кроме того, если кто-то знает о какой-либо причине, я не задумывался о том, почему что-то подобное является плохой идеей, или если у кого-то есть какие-либо связанные предложения, я хотел бы услышать это.
Заранее спасибо.