C ++ Контейнер фиксированного размера с заменяемыми элементами - PullRequest
1 голос
/ 05 июля 2011

Я ищу контейнер со следующей функциональностью:

  • Фиксированный размер во время выполнения. Таким образом, память не должна выделяться небольшими порциями (как std::list делает).
  • Элементы должны быть заменены (что-то вроде std::list::splice предложения).

EDIT: Думая о списке: мне просто нужно переместить элементы из произвольной позиции вперед. EDIT2: Я хотел бы использовать что-то вроде std::list, но использует преимущества фиксированного размера во время выполнения.

Ответы [ 4 ]

3 голосов
/ 05 июля 2011

Я бы подумал о массиве TR1:

std::array<T, int>

Или, если у вас его еще нет,

boost::array<T, int>

, который идентичен для всех намерений и целей.Конечно, валидность std :: swap для элементов зависит от наличия правильного конструктора / оператора копирования.

2 голосов
/ 05 июля 2011

Мне не слишком понятно, что вы ищете. На ум приходят два решения: std::vector (созданный с максимальным размером) в сочетании с хорошей реализацией swap для ваших объектов или пользовательский распределитель для std::list, который предварительно выделяет количество узлов, которые вы будете использовать. нужно в одном блоке.

0 голосов
/ 05 июля 2011

std :: vector?

На основе массива.Можно указать размер и иметь функцию подкачки.

Вы еще не сказали, для чего вы будете его использовать, поэтому я не знаю, возникнут ли у вас какие-либо проблемы со скоростью.

0 голосов
/ 05 июля 2011

Вы можете указать (начальный) размер std::list во время построения:

std::list<Type> myList = std::list<Type>(10);

Впоследствии вы можете увеличивать / уменьшать его, но список будет содержать 10 построенных по умолчанию объектов Type изначало.

Это соответствует вашим потребностям?

...