复制后的std :: vector容量

Any*_*orn 14 c++ stl vector capacity

  • vector :: operator =改变向量容量吗?如果是这样,怎么样?
  • vector的复制构造函数是否具有复制能力?

我查看了文档,但找不到具体的答案.它是依赖于实现的吗?

GMa*_*ckG 9

所有你保证的是:

  1. 矢量具有足够的容量来存储其元素.(明显.)
  2. 在当前容量已满之前,向量将无法获得新容量.*

因此,实现需要多少额外或者很少的实现取决于实现.我认为大多数会在复制时使容量匹配大小,但它不能降低容量.(由于上面的数字2;在不允许有足够空间的情况下重新分配.)

*主要是.请参阅下面的查尔斯评论.

  • 在C++ 0x中,需求已经改变,在调用`reserve`之后不会发生重新分配,直到插入移动容器的大小超过`capacity`(注意,不再是以前传递给`reserve`的大小) .这意味着您可以"保留",查询"容量"并确切地知道下次重新分配的确切时间. (2认同)
  • "......没有_require_重新分配..."但这是我的观点.该标准并未强制要求向量不应重新分配,即使它具有备用容量且不严格需要.除非客户端实际上调用了"reserve",否则它不会破坏接口契约. (2认同)