vector容器中size与capacity的区别

        理解这两个方法的区别之前,需要先搞清楚vector的原理。vector底层是一个动态数组,插入元素时会申请新的空间,但考虑到效率问题,并不是每插入一个元素,就申请一个空间,而是事先先申请好一段空间,开始插入元素,当空间不足时,再重新申请一块更大的空间。并将原来空间中的元素拷贝到新空间中,再继续插入元素。

        而size就是vector中元素的个数,而capacity就是vector申请的内存空间的大小。

        我们用动态数组举个例子,给arr动态申请了一块内存,大小为20个sizeof(int)。此时arr中我们还没有添加数据,只是申请了一块内存,告诉操作系统,我后面要用这块内存,你不准给别人用。此时的size就是0,而capacity就是20。

int *arr = new int[20];

下面写一个例子看下size和capacity的大小。

	std::vector<int> v1;
	for (int i = 0; i < 20; i++)
	{
		v1.push_back(i);
	}

	std::cout <<"v1.size = "<<v1.size() << std::endl;
	std::cout << "v1.capacity = " << v1.capacity() << std::endl;

        从上面例子可以看出,我们插入20个元素后,size大小是20,capacity大小为28。也就是vector中有20个元素,但vector为我们申请了28个sizeof(int)大小的空间。

        size和capacity可能会相等,也可能不等,但capacity一定是比size大的。

        需要注意的是:虽然上述例子中capacity大小为28。但我们不能去访问21到28区间块的数据,因为这块区域内我们还未插入数据,这样去访问数据(v1.at(22)或者v1[22]),程序就会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大草原的小灰灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值