可能重複:
Why does stack<const string> not compile in g++?矢量<const int>是不允許的。那麼map <const int,int>等等呢?
我們知道,vector<const int>
是不允許的。
但是是否允許map<const int, int>
,map<int, const int>
或map<const int, const int>
?
爲什麼(不)?
可能重複:
Why does stack<const string> not compile in g++?矢量<const int>是不允許的。那麼map <const int,int>等等呢?
我們知道,vector<const int>
是不允許的。
但是是否允許map<const int, int>
,map<int, const int>
或map<const int, const int>
?
爲什麼(不)?
向量中的項必須是可複製構造的或(如C++ 11)move-constructible。
地圖中的關鍵只需要破壞,而不是複製/移動可構造,所以在這方面的要求比較鬆散。
至於爲什麼這是非常簡單的:當/如果一個向量被調整大小,現有緩衝區中的數據必須被複制或移動到新的緩衝區中。相比之下,地圖通常將其內容作爲節點存儲在樹中。一旦創建了一個節點,它就會一直存在直到它被銷燬。雖然樹有時需要平衡,但只需要操作節點之間的指針 - 在創建節點之後,節點中的密鑰永遠不會被修改。
您需要能夠爲存儲在STL容器中的項目插入副本,這就是爲什麼它不被允許。
您仍然可以使用const引用來通過類方法(getter)通過const_iterator
將容器導出爲只讀訪問。
遊戲SO很有趣,不是嗎? –
'丹尼斯里奇'是一個大膽的暱稱;)... –
你想要做什麼,你需要這些東西? –