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();

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐