关于c++ vector capacity、max_size、size、sizeof的区别

来源:互联网 发布:2017天猫数据直播 编辑:程序博客网 时间:2024/06/05 20:25
capacity,如果不重新分配内存,当前已经分配的可以容纳的元素的个数.
max_size最大的可能的元素个数.
size是当前元素个数

sizeof是vector本身的大小(sizeof(vector<int>))

  • size()告诉你容器中有多少元素。它没有告诉你容器为它容纳的元素分配了多少内存。
  • capacity()告诉你容器在它已经分配的内存中可以容纳多少元素。那是容器在那块内存中总共可以容纳多少元素,而不是还可以容纳多少元素。如果你想知道一个vector或string中有多少没有被占用的内存,你必须从capacity()中减去size()。如果size和capacity返回同样的值,容器中就没有剩余空间了,而下一次插入(通过insert或push_back等)会引发上面的重新分配步骤。
  • resize(Container::size_type n)强制把容器改为容纳n个元素。调用resize之后,size将会返回n。如果n小于当前大小,容器尾部的元素会被销毁。如果n大于当前大小,新默认构造的元素会添加到容器尾部。如果n大于当前容量,在元素加入之前会发生重新分配。
  • reserve(Container::size_type n)强制容器把它的容量改为至少n,提供的n不小于当前大小。这一般强迫进行一次重新分配,因为容量需要增加。(如果n小于当前容量,vector忽略它,这个调用什么都不做,string可能把它的容量减少为size()和n中大的数,但string的大小没有改变。在我的经验中,使用reserve来从一个string中修整多余容量一般不如使用“交换技巧”,那是条款17的主题。)

0 0
原创粉丝点击