我们知道这vector<const int>
是不允许的。
但是map<const int, int>
,map<int, const int>
是否map<const int, const int>
允许?
为什么不)?
我们知道这vector<const int>
是不允许的。
但是map<const int, int>
,map<int, const int>
是否map<const int, const int>
允许?
为什么不)?
向量中的项必须是可复制构造的或(从 C++11 开始)可移动构造的。
地图中的键只需要可破坏,而不是可复制/移动可构造,因此在这方面的要求要宽松得多。
至于为什么会这样,这很简单:当/如果调整向量的大小时,必须将现有缓冲区中的数据复制或移动到新缓冲区中。相比之下,地图通常将其内容存储为树中的节点。一旦创建了一个节点,它就会一直存在,直到它被销毁。虽然树有时确实需要平衡,但这只需要在节点之间操作指针——节点中的键在节点创建后永远不会被修改。
您需要能够为存储在 STL 容器中的项目插入副本,这就是不允许这样做的原因。
const_iterator
您仍然可以使用 const 引用来导出容器,以便通过类方法(getter)进行只读访问。