admin管理员组文章数量:1611524
理解这两个方法的区别之前,需要先搞清楚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]),程序就会报错。
版权声明:本文标题:vector容器中size与capacity的区别 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728619635a1166182.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论