std :: list фиксированный размер - PullRequest
3 голосов
/ 11 октября 2010

Как я могу создать std::list с фиксированным количеством элементов?

Ответы [ 4 ]

10 голосов
/ 11 октября 2010

Если вы хотите просто контейнер фиксированного размера, возможно, вы ищете std::tr1::array.(Или просто std::array для C ++ 0x.)

Если вы не вставляете и не удаляете элементы, я не думаю, что есть какое-то преимущество в использовании std::list вместо std::array или std::vector.

8 голосов
/ 11 октября 2010
#include <list>

// list with 5 elements, using default constructor
const size_t fixedListSize(5);
std::list<int> mylist(fixedListSize);  

Если вы хотите, чтобы в нем всегда было ровно 5 элементов, вам нужно обернуть его в класс фасада, чтобы предотвратить вставку и удаление.

Если это действительно то, что вам нужно, вам лучше использовать другой контейнер вместо list, поскольку, как отмечалось в других ответах, вы бы скрывали наиболее полезные функции list.

2 голосов
/ 11 октября 2010

Вы должны использовать std::list конструктор.

explicit list (size_type n, const T& value = T(), const Allocator& = Allocator());

Просто укажите при создании точное количество элементов.

std::list<int> someList(20);

Вы также можете указать начальное значение для каждого элемента.

std::list<int> someList(20, int(42));

std :: list :: resize также является правильным решением.

1 голос
/ 11 октября 2010

Я хотел бы спросить вас, почему вы хотите, чтобы оно имело фиксированное количество элементов и зачем использовать список?

Возможно, пользователь реализует кэш с ограниченным числом элементов иполитика удаления LRU.В этом случае список является хорошей коллекцией для использования.Каждый раз, когда к элементу обращаются, вы склеиваете этот элемент в начало списка.Если вам нужно вставить новый элемент (чтобы список был заполнен), вы попадаете в конец списка.

Вы также можете поддерживать поиск элементов, но std :: list - лучший класс.для обработки LRU.

...