2010-10-11 105 views
3

如何創建具有固定元素數量的std::liststd ::列表固定大小

+8

尺寸在其整個生命週期內都應該是固定的?在那種情況下,你爲什麼使用一個列表?它比數組(以及它們的包裝器,比如'std :: vector'和'std :: array')的優點主要是插入/刪除元素,要求固定列表只是要求其缺點(更多的浪費內存,緩慢的隨機訪問,...)。 – 2010-10-11 15:48:18

回答

8
#include <list> 

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

如果您希望它總是隻有5個元素,您必須將其包裝在外觀類中以防止插入和擦除。

如果這確實是你想要的,那麼最好使用不同的容器,而不是list,因爲正如其他回覆中指出的那樣,你將隱藏list的最有利功能。

+0

這就是'const'的用途。 – 2010-10-11 15:57:49

+3

@Alf P. Steinbach:不是。使列表成爲const將禁止插入和刪除,但同時它將禁止修改列表的實際內容。 – 2010-10-11 16:10:28

+1

爲什麼演員?只有一個構造函數會用一個整數類型參數來匹配調用。 – 2010-10-11 16:22:25

2

您應該使用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也是正確的解決方案。

10

如果你只是想要一個固定大小的容器,也許你正在尋找std::tr1::array。 (或者只是std::array對C++ 0x中。)

如果不插入或刪除,我不認爲這是在使用std::list代替std::arraystd::vector任何利益元件。

1

我不得不問你爲什麼要讓它有固定數量的元素,爲什麼要使用列表?

這可能是因爲用戶正在實現具有有限數量的元素和LRU刪除策略的緩存。在這種情況下,列表是一個很好的集合。每次訪問元素時,都會將該元素拼接到列表的前面。如果你需要插入一個新的elemenet(所以列表得到滿),你從列表的後面彈出。

你也可以維護某些元素的查找,但std :: list是處理LRU的最好的類。