2021-08-06

记录一下初次学习C++的一些奇奇怪怪的想法,关于vector中的resize,capacity,reserve方法

想法,C++Primer书中练习9.39,9.40

#include<iostream>
#include<vector>
using namespace std;
int main()	
{
	vector<string> svec;
	//svec.reserve(1024);
	
	string word;
	for(int i=0;i!=1002;i++)
	{
		svec.push_back("i");
	}
	cout<<"capacity_pre1="<<svec.capacity()<<endl;//在每次push_back后都会检查一次,是否size=capacity如果是则将当前capacity=2倍的当前size (先检查大小再写入,还是先写入再扩大我还没研究过)
	svec.push_back("2");
	cout<<"capacity_pre2="<<svec.capacity()<<endl;
	cout<<"resize="<<svec.size()+svec.size()/2<<endl;
	svec.resize(svec.size()+svec.size()/2);
	cout<<"size="<<svec.size()<<" "; 
	cout<<"capacity="<<svec.capacity()<<endl;
	
}

保存一下自己想法,书中只提到了执行insert与resize或者reserve的时候给定大小超过当前capacity才可能重新分配空间。
当resize大小超过capacity的时候,capacity会变成当前非空元素的两倍再于resize中参数进行比较,如果resize的值还是大于翻倍后的capacity ,则capacity大小=resize大小,否则capacity两倍当前非空元素个数(描述感觉有点乱
本例中非空元素为1003个,resize(1504),当前capacity大小为1024,此处的1024是当svec.size()=svec.capacity=512,(当然这个512是在之前256的时候capacity*2得到的).显然1504>1024 ,但最终capacity大小为2006。
编译器Dev-C++ 5.10 运行结果
在这里插入图片描述
如果我们改一下让resize大于两倍非空元素的个数这里随便给一个3000,

sevc.resize(3000);

在这里插入图片描述
显然3000>2006,最终的capacity变成了3000
虽然不知道这个知识点有什么用,但先记录一下(:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值