21xrx.com
2024-11-09 00:19:05 Saturday
登录
文章检索 我的文章 写文章
C++中的vector resize和reserve使用详解
2023-07-08 14:26:53 深夜i     --     --
C++ vector resize reserve 详解

在C++中,vector是一种非常有用的数据结构,它被用来存储和处理动态数组。其中,resize和reserve是两种常用的vector函数。本文将为大家详细介绍这两个函数的使用方法。

一、resize函数

resize函数用于改变vector的大小,有两种形式,一种是resize(n),另一种是resize(n, val)。其中,n是指定vector的新大小,val是在新元素空间中所包含的默认值。如果n小于原vector的大小,则vector将被截断。如果n大于原vector的大小,则新元素自动添加到vector的末尾。

例如:


#include <iostream>

#include <vector>

using namespace std;

int main()

{

  vector<int> myvector;

  // 添加3个元素到向量

  for (int i = 1; i <= 3; i++)

    myvector.push_back(i);

  cout << "Vector contains the following elements: " << endl;

  for (int i = 0; i < myvector.size(); i++)

    cout << myvector[i] << " ";

  // 改变向量大小

  myvector.resize(5);

  cout << endl << "After resize, vector contains: " << endl;

  for (int i = 0; i < myvector.size(); i++)

    cout << myvector[i] << " ";

  // 改变向量大小,并添加默认元素

  myvector.resize(8, 100);

  cout << endl << "After resize and adding default value, vector contains: " << endl;

  for (int i = 0; i < myvector.size(); i++)

    cout << myvector[i] << " ";

  return 0;

}

运行结果:


Vector contains the following elements:

1 2 3

After resize, vector contains:

1 2 3 0 0

After resize and adding default value, vector contains:

1 2 3 0 0 100 100 100

从上面的代码可以看出,resize函数的第一个形式将向量大小改变为指定大小。如果新大小比原来的小,则元素数组末尾的元素将被-截断。如果新大小比原来的大,则新元素将附加到向量的末尾,其值将由默认构造函数确定。第二种形式的resize调整向量大小,并用指定值初始化新元素。

二、reserve函数

reserve函数用于在不初始化向量元素的情况下预分配向量占用的空间。这样一来,在向量被添加新元素时,无需重新分配空间。

例如:


#include <iostream>

#include <vector>

using namespace std;

int main()

{

  vector<int> myvector;

  // 添加一些元素

  for (int i = 1; i <= 5; i++)

    myvector.push_back(i);

  // 输出向量的容量和大小

  cout << "vector capacity: " << myvector.capacity() << endl;

  cout << "vector size: " << myvector.size() << endl;

  // 预分配500个元素的空间

  myvector.reserve(500);

  // 输出向量的容量和大小

  cout << "vector capacity after reserve: " << myvector.capacity() << endl;

  cout << "vector size after reserve: " << myvector.size() << endl;

  return 0;

}

运行结果:


vector capacity: 8

vector size: 5

vector capacity after reserve: 500

vector size after reserve: 5

从上面的代码可以看出,reserve函数用于预分配vector占用的空间,它接受一个整数参数n,表示预分配的空间大小。该函数不会改变vector的大小,也不会初始化元素值,只是增加向量内部的容量。如果新容量大于原容量,则vector的存储器将被重新分配,复杂度为O(n)。如果新容量小于等于原容量,则该函数不进行任何操作。

总结:

在使用vector时,resize函数和reserve函数都是非常实用的函数。它们可以帮助我们更高效地管理向量的大小和占用空间。需要注意的是,在使用这两个函数时,一定要考虑好应用场景,以避免出现不必要的开销和效率低下的情况。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复