不允许使用vector <const int =“”>。那么map <const int,=“”int =“”>等等呢?</const> </const>

时间:2012-12-07 17:56:41

标签: c++

  

可能重复:
  Why does stack<const string> not compile in g++?

我们知道vector<const int>是不允许的。

但允许map<const int, int>map<int, const int>map<const int, const int>

为什么(不是)?

2 个答案:

答案 0 :(得分:4)

向量中的项必须是可复制构造的或(从C ++ 11开始)可移动构造。

地图中的关键点只需要是可破坏的,而不是复制/移动可构造的,因此在这方面要求更加宽松。

至于为什么会这样,它非常简单:当/如果向量调整大小时,必须复制现有缓冲区中的数据或将其移动到新缓冲区中。相反,地图通常将其内容存储为树中的节点。一旦创建了一个节点,它就会一直存在,直到它被销毁。虽然树确实需要平衡,但只需要操作节点之间的指针 - 节点中的键永远不会在创建节点后被修改。

答案 1 :(得分:0)

您需要能够为存储在STL容器中的项目插入副本,这就是为什么不允许这样做。

您仍然可以使用const引用从类方法(getter)通过const_iterator导出容器以进行只读访问。