C++容器中size和capacity的区别~

发布网友 发布时间:2022-04-21 20:01

我来回答

4个回答

热心网友 时间:2023-12-27 17:14

size是指容器当前拥有元素的个数,而capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。如vector<int> ivect(10),ivect.capacity()=10,ivect.size()=0,当你向ivect中插入元素时,只要没有超过十个,那么capacity就不变,而size为你插入的元素的个数。当插入第十个时,capacity=size=10,当再插入一个,即第十一个数据时,容器重新分配存储空间:ivect.capacity()=20,而ivect.size()=11,即容器重新分配空间的话是现有空间的2倍进行分配,以保证vector的效率。

热心网友 时间:2023-12-27 17:15

楼主犯了好几个错误:

1. vector插入元素比剩余空间大的时候本身会自动扩容,而且原理也很easy:

size_type len = old_size + max(old_size, n);所以无需自己扩容。

2. vector的使用显然是应该用push_back这样的接口,才可自动扩容,否则就是多此一举,想想vector是干嘛用 的。

3. 至于楼主这两行误用的代码为什么错,vector基于size来运行,capacity只是一种容量可能,reserve只扩充capacity,size不变(两个指针,end-start), 用操作符[]插入元素,会对size做下标越界判断,显然会报错


不懂其内部机理,就老老实实用开放的接口。

vector<int>  A;       //创建一个向量对 象
int n;    
int primecount = 0, i, j;
cout<<"Enter a value>=2 as upper limit: ";
cin >> n;
A.push_back(2);
for(i = 3; i <= n; i++)
{   
if (i % 2 == 0)      
continue;
j = 3;
while (j <= i/2 && i % j != 0)  
j += 2;        
if (j > i/2) 
    A.push_back(i);
}
primecount  = A.size();

热心网友 时间:2023-12-27 17:15

  capacity的意思是容量,此方法返回的是该vector对象最多能容纳多少个元素。
  size的意思是大小,此方法是返回该vector对象当前有多少个元素。

热心网友 时间:2023-12-27 17:16

size表示容器当前的大小,已存了多少数据,capacity表示容量,就和一瓶可乐是1L这个容量一样,但是里面不一定有1L的水。追问网上复制的就不要贴来了。。。看看我的问题再说怎么样~

追答呵呵,我看了你的标题,自己回答的,你怎么知道我复制的?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com