不允许使用vector <const int>.为什么允许pair <const int,int>?

Den*_*hie 5 c++

可能重复:
为什么stack <const string>不能用g ++编译?

另一个问题的答案 解释了为什么我们(据说)不能拥有const对象的容器.例如,这是不允许的:

vector<const int> v; //not allowed
Run Code Online (Sandbox Code Playgroud)

但为什么pair允许第一个对象const呢?实际上,这是对象pair内部的s 所发生的事情map.我错过了什么吗?

将非常感谢对这种现象的详细和直观的解释.

pra*_*ber 15

我认为主要原因是因为std::pair不重新分配对象,所以它们不必是可分配的.

更新:

实际上,vector是唯一需要可分配对象的容器.这是因为相应的标准向量必须具有其元素的连续存储位置.因此,如果没有空间可以添加更多对象,则向量必须将其数据重新分配到另一个位置(因此使用对象的assignable属性).

  • @DennisRitchie:对不起,我对我的误解深表歉意.如果您不想修改vector的元素,可以使用const迭代器.一般情况下,您可能会发现有用的[本文](http://www.cprogramming.com/tutorial/const_correctness.html). (2认同)

Pup*_*ppy 6

std::pair如果您尝试分配它,只需要它的内容可以分配.但是,std::vector始终需要分配以进行重新分配.