c++中capacity和size的区别,以及reserve和resize的区别,shink_to_fit用法

容器的size是指它已经保存的元素的数量;而capacity则是在不分配新的内存空间的前提下它最多可以保存多少元素;

只有需要的内存空间超过当期容量,reserve才会去调整vector的容量;

如果需求小于等于当前容量,reserve什么也不做;

resize则是直接改变容器大小;

当前resize设置大小如果小于容器的大小,则容器后部的元素会被删除;

如果resize设置大于容器的大小,会将新元素添加到容器后部;

总之,由于该操作不改变元素数量,仅仅影响vector预先分配多大内存空间;

<vector>
using std::vector;
int main(int argc,char** argv)
{
  vector<int>  ivec;
  for(int i=0;i<10;++i)
  ivec.push_back(i);
  std::cout<<"ivec::capacity="<<ivec.capacity()<<std::endl;
  std::cout<<"ivec::size="<<ivec.size()<<std::endl;
  
  ivec.reserve(10);
  std::cout<<"ivec::capacity="<<ivec.capacity()<<std::endl;
  std::cout<<"ivec::size="<<ivec.size()<<std::endl;
  
  ivec.resize(5);
  std::cout<<"ivec::capacity="<<ivec.capacity()<<std::endl;
  std::cout<<"ivec::size="<<ivec.size()<<std::endl;
  
  ivec.shrink_to_fit();
  std::cout<<"ivec::capacity="<<ivec.capacity()<<std::endl;
  std::cout<<"ivec::size="<<ivec.size()<<std::endl;
  return 0;
}

输出结果为


一开始ivec中没有任何元素,插入10个元素后,vecror自动分配的容量是16,;

进行reserve操作,reserve(10)正好等于元素数量,所以预先分配空间不改变;

最后进行resize操作,将vector后5个元素删除了,只保留了前五个元素;

肯定有人要问,不需要vector预先保留空间怎么办?

很简单,c++11贴心的提供了shink_to_fit()来讲capacity减少到和size相同;

最后看图可知capacity和size都为5。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值