0x00 前言
文章中的文字可能存在语法错误以及标点错误,请谅解;
如果在文章中发现代码错误或其它问题请告知,感谢!
Windows版本:Win10专业版
VSCode版本: 1.55.2 (user setup)
0x01 vector定义动态数组及访问形式
C++标准提供被封装的动态数组——vector。vector是一个封装动态大小数组的顺序容器(Sequence Container),这种被封装的数组可以具有各种类型。vector不是一个类,而是一个类模板。vector定义动态数组的形式为:
vector<元素类型>数组对象名(数组长度);
跟普通数组相比,使用vector定义的数组对象元素都会被初始化。若是数组元素为基本类型则元素初始化为0;若数组元素为类类型,则会调用类的默认构造函数初始化(需要保证该类具有默认的构造函数)。
vector动态数组也可以自定义初值,形式为:
vector<元素类型>数组对象名(数组长度,元素初值);
对vector数组对象元素访问与普通数组相同:
数组对象名[下标表达式]
注意,vector数组对象不是数组,而是封装了数组的对象,vector数组名字表示的就是一个数组对象,而非数组的首地址。
vector定义数组对象成员函数如下,其中size()返回数组长度,比较重要:
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
0x02 vector应用举例
#include<iostream>
#include<vector>
using namespace std;
//计算arr数组元素平均值
double average(const vector<double>&arr)
{
double sum = 0;
int i = 0;
for(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 << "Please input" << n << "real numbers:" << endl;
for(int i = 0; i < n;i++)
{
cin >> arr[i];
}
cout << "Average = " << average(arr) << endl;
return 0;
}
《C++语言程序设计(第4版)》书上所有章节出现的示例源代码随着学习的深入会陆续上传至github,代码为个人手动输入并通过编译,有的示例代码可能没有注释:https://github.com/fyw4/C-plus-plus-learning-example
以上。
参考文档:
郑莉 董渊 何江舟.《C++语言程序设计(第4版)》[M].北京:清华大学出版社。