vector容器中resize与reserve的区别
Vector中的resize()与reserve()的区别首先申明resize()和reserve()这两个成员函数都是Vector的公有成员函数(public member function)一、先了解vector容器的构成:1.首先明白vector是一种顺序容器(申请的内部空间是连续的)2.它的底层是由类模板实现的二、这两个成员函数的意
·
Vector中的resize()与reserve()的区别
我用的是VS2013编译器
首先申明resize()和reserve()这两个成员函数都是Vector的公有成员函数(public member function)
一、先了解vector容器的基本构成:
1.首先明白vector是一种顺序容器(申请的内部空间是连续的:类似数组)
2.它的底层是由类模板实现的
3.vector的基本模板:
template<class T>
class vector
{
public:
vector()
{};
~vector()
{};
...
protected:
T* _arr;//vector的内部命名
size_t _sz;//记录该数组_arr中存储的有效数据的个数
size_t _capacity;//记录该数组_arr开辟的总空间大小
};
};
4.stl库中英文版详解:(如下图)
二、这两个成员函数的意义:
resize():重新申请并改变当前vector对象的有效空间大小
reserve():重新申请并改变当前vector对象的总空间(_capacity)大小
三、单独讲解resize()和reserve()
1、resize()
该函数的模板:
void resize(size_t sz,T c=T());
1.总的来讲:resize()就是重新申请有效空间的大小;
2.再用运该函数的时候最多可以有两个参数,至少要有一个参数(sz:表示你要申请多少有效元素空间的个数)
3.第一个参数sz:代表的是当前要申请的有效元素的个数;
4.第二个参数c:代表的是给这sz个有效空间赋一个初始值(默认为T()(T()表示当T为什么类型时,c就是什么类型的默认值eg:T为int 则:T()为0,T为char 则:T()为‘\0’))
5.该函数可以直接由vector的对象调用
6.该函数无返回值
vector中resize()应用的举例:
由上述例子总结:
1.resize()可以改变有效空间的大小;
2.resize()有改变默认值的功能,但该改变的范围是有限制的 这个范围是当前设置的sz范围内
3.当新设置的sz值大于之前的sz时,默认参数只作用于多开辟的那些空间
4.当resize的sz(size())改变时capacity的大小也会随着改变,但是当reserve()改变capacity的大小后,size()的大小并不会随之改变它仍然保持的是原来有效元素的个数;
2、reserve()
该函数的模板:
void reserve(size_t n);
1.与resize()函数最直接的区别是:reserve()只有一个参数;
2.reserve()中的参数n改变的是总空间(_capacity)的大小;(注意:他开辟出来的n
个空间并不代表就都是有效空间,只有size()大小的空间才是有效空间)
3.该函数无返回值
vector中reserve()应用的举例:
另附:(目的:熟悉一下list 中有那些接口)
List(链表)(简讲)
list中没有reserve(),但是有resize();
更多推荐
已为社区贡献1条内容
所有评论(0)