21xrx.com
2025-03-29 22:10:24 Saturday
文章检索 我的文章 写文章
C++中的vector resize和reserve使用详解
2023-07-08 14:26:53 深夜i     43     0
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函数都是非常实用的函数。它们可以帮助我们更高效地管理向量的大小和占用空间。需要注意的是,在使用这两个函数时,一定要考虑好应用场景,以避免出现不必要的开销和效率低下的情况。

  
  

评论区