C++标准库提供了被封装的动态数组——vector,而且这种被封装的数组可以具有各种类型,这就使我们免去了一些重复性工作。
vector不是一类,而是一个类模板。
1. vector定义动态数组的形式为
vector<元素类型>数组对象名(数组长度);
尖括号中的类型名表示数组元素的类型。数组长度是一个表达式,表达式中可以包含变量。例如,下面定义了一个大小为10的int型动态数组对象arr:
int x=10;
vector<int>arr(x);
2. vector动态数组初始化
与普通数组不同的是,用vector定义的数组对象的所有元素都会被初始化。如果数组的元素类型为基本数据类型,则所有元素都会被以0初始化;如果数组元素为类类型,则会调用默认的构造函数初始化。因此如果以此形式定义的vector动态数组,需要保证作为数组元素的类具有默认构造函数。另外,初值也可以自己指定,但只能为所有元素指定相同的初值,形式为:
vector<元素类型>数组对象名(数组长度,元素初值);
3. vector数组对象元素的访问方式
对vector数组对象元素的访问方式与普通数组具有相同的形式:
数组对象名[下标表达式];
但是vector数组对象的名字表示的就是一个数组对象,而非数组的首地址,因为数组对象不是数组,而是封装了的数组对象。
vector定义的数组对象具有一个重要的成员函数size(),它会返回数组的大小。
【例】vector应用举例
#include<iostream>
#include<vector>
using namespace std;
//计算arr数组中元素的平均值
double avg(const vector<double>& arr)
{
double sum = 0;
for (unsigned i = 0; i < arr.size(); i++)
{
sum += arr[i];
}
return sum / arr.size();
}
int main()
{
unsigned n;
cout << "n=";
cin >> n;
vector<double>arr(n);//创建数组对象
cout << "请输入" << n << "个数:" << endl;
for (unsigned i = 0; i < n; i++)
{
cin >> arr[i];
}
cout << "这" << n << "个数的平均值为:" << avg(arr)<<endl;
return 0;
}
运行结果:
本例中,在主函数里创建了动态数组对象arr,然后通过键盘输入的方式为数组元素赋值,在调用avg函数计算数组元素的平均值。