admin管理员组文章数量:1611906
在使用STL中的vector时,对于size和capacity、resize和reserve的使用很是模糊。于是这篇博文就诞生了,主要是加深自己的理解和方便日后查阅。
在vector中size()和capacity()属性分别对应着resize(size_type)和reserve(size_type)这两个方法。
为此,我们先来看看size()和capacity()属性的区别:
- size: 表示实际容器中保存元素的个数
- capaciy: 表示在发生重新分配之前允许存放多少元素
- resize(size_type): 对某个vector容器调用resize方法会在该容器尾部添加或删除一些元素,使容器达到指定的大小。
- reserve(size_type): 对某个vector容器调用reserve方法仅仅设置capacity这个值。
下面,我们给出一些测试程序来说明:
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int> vecSize;
vector<int> vecCapacity;
vecSize.resize(2);
cout << "vecSize.size() = " << vecSize.size() << ", vecSize.capacity() = "<< vecSize.capacity() <<endl;
vecCapacity.reserve(2);
cout << "vecCapacity.size() = " << vecCapacity.size() << ", vecCapacity.capacity() = " << vecCapacity.capacity() << endl;
return 0;
}
输出如下:
vecSize.size() = 2, vecSize.capacity() = 2
vecCapacity.size() = 0, vecCapacity.capacity() = 2
从输出结果我们可以看出resize方法会使vector容器拥有指定个数的元素,而reserve只是改变capaciy的值。
接下来我们来看看下个例子:
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int> vecSize;
vector<int> vecCapacity;
vecSize.resize(2);
vecCapacity.reserve(2);
//这里我们使用at函数来进行访问,at函数会进行下标越界检查
vecSize.at(0) = 1;
vecCapacity.at(0) = 2;
return 0;
}
上面的测试程序在运行时会接收到std::out_of_range异常。这也说明了reserve只是改变capaciy的值此时这些内存空间可能还是“野”的。如果使用[]操作符进行访问,可能出现数组越界问题。
最后,我们在来看看resize方法对size和capacity的影响。
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int> vecInt;
cout << "vecInt.size() = " << vecInt.size() << ", vecInt.capacity() = " << vecInt.capacity() << endl;
vecInt.resize(1024);
cout << "vecInt.size() = " << vecInt.size() << ", vecInt.capacity() = " << vecInt.capacity() << endl;
vecInt.resize(1500);
cout << "vecInt.size() = " << vecInt.size() << ", vecInt.capacity() = " << vecInt.capacity() << endl;
return 0;
}
输出结果如下所示:
vecInt.size() = 0, vecInt.capacity() = 0
vecInt.size() = 1024, vecInt.capacity() = 1024
vecInt.size() = 1500, vecInt.capacity() = 1536
这是vector的一个好处它的capacity()机制减少了内存分配的次数。等于说resize()还替我们做了reserve()的事。
本文标签: 学习笔记区别VectorCapacitysize
版权声明:本文标题:C++学习笔记之——vector的size和capacity、resize和reserve的区别 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728621348a1166397.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论