您的位置:

详解vector的reserve函数

一、概述

在C++的STL中,vector是一种很常用的容器,它可以存放任意类型的数据,并且可以动态增加或减少元素个数。其中,reserve函数是vector的一个重要函数,它可以为vector分配一定的空间,以减少vector在动态增加元素时的内存重新分配操作,从而提高程序的效率。

二、reserve函数的语法

void reserve(size_type n);

其中,n是要为vector分配的空间大小,size_type是一个无符号整形,通常被定义为std::vector<T>::size_type

三、reserve函数的作用

reserve函数可以为vector分配一定的空间,但并不改变vector的元素个数。当向vector中添加元素时,如果添加后的元素个数超过了当前的空间大小,则会触发重新分配内存的操作,这个操作会使程序效率变低。

而如果在添加元素前调用reserve()函数,可以使vector预留指定数量的空间,使得添加元素时不会触发重新分配内存的操作,从而提高程序的效率。

四、使用reserve函数的注意事项

1、调用reserve函数并不会改变vector的元素个数,它只会改变vector的内存分配大小。

2、reserve函数传入的参数n应该大于当前vector所占的空间大小,否则reserve函数将不会起到任何作用。

3、reserve函数并不会初始化新分配空间中的值。因此,在使用reserve()函数之后,再对vector进行访问可能会导致未定义的行为。

4、如果在reserve()函数之后并没有从尾部添加新的元素,进行resize()push_back()操作时会导致空间浪费。

五、reserve函数的示例代码

#include <iostream>
#include <vector>

int main()
{
  std::vector<int> vec;
  std::cout << "当前vector的size为:" << vec.size() << std::endl;
  vec.reserve(10);
  std::cout << "使用reserve(10)函数后,vector的capacity为:" << vec.capacity() << std::endl;
  
  for (int i = 0; i < 10; i++)
  {
    vec.push_back(i);
    std::cout << "当前vector的size为:" << vec.size() << ", capacity为:" << vec.capacity() << std::endl;
  }
  
  return 0;
}

运行结果:

当前vector的size为:0
使用reserve(10)函数后,vector的capacity为:10
当前vector的size为:1, capacity为:10
当前vector的size为:2, capacity为:10
当前vector的size为:3, capacity为:10
当前vector的size为:4, capacity为:10
当前vector的size为:5, capacity为:10
当前vector的size为:6, capacity为:10
当前vector的size为:7, capacity为:10
当前vector的size为:8, capacity为:10
当前vector的size为:9, capacity为:10
当前vector的size为:10, capacity为:10

可以看到,在使用reserve()函数之后,当向vector插入元素时,并没有触发重新分配内存的操作。

六、总结

reserve函数是vector容器的一个重要函数,它可以为vector分配指定的空间大小,以减少添加元素时的内存重新分配操作,提高程序的效率。但需要注意的是,reserve()函数并不会改变vector的元素个数,并且在使用reserve()函数后并没有从尾部添加新的元素,进行resize()push_back()操作时会导致空间浪费。因此,在使用reserve()函数时需要谨慎使用。