文章目录
我们在声明数组的时候,采用的是datatype array[len]的形式,数组在分配之后,不能调整大小,删除和插入数据时操作十分的繁琐,虽然可以采用链表,但是链表的操作更麻烦,我们希望有更简单的方法。
与string类一样, 向量vector 同属于STL(Standard Template Library,标准模板库)中的定义的类, vector是一个封装了动态数组的顺序容器(Sequence Container),它能够存放各种类型的数据和对象。
可以简单的认为vector容器是一个能够存放任意类型的动态数组,与数组相比,vector容器的优点在于它能够根据需要自动调整的大小,随时放入更多的元素。此外, vector也提供了成员函数对自身进行操作。
一、容器的定义
首先,如果要在程序中使用vector容器,必须包含头文件 <vector>。如下:
#include <vector>
vector类是一个模板类,位于std命名空间内,为方便使用还需要增加:
using namespace std;
声明一个容器很简单:
vector<int> vi; // 定义用于存放整数的容器
vector<double> vd; // 定义用于存放浮点数的容器
vector<string> vs; // 定义用于存放string字符串的容器
vector<struct st_girl> vgirl; // 定义用于存放超女结构体的容器
vector<CGirl> vGirl; // 定义用于存放超女类的容器
vector容器可以存放C语言的基本数据类型,可以存放结构体,还可以存放类,这正是我们想要的简单的方法,链表?我已经有二十年没有用它了。
二、容器的使用
vector的功能强大,成员函数很多,我不想按普通教程的方式来介绍它,那样会太烦锁,我根据实际开发中应用的场景,采用示例程序介绍vector常用的用法。
1、存放整数
示例(book220.cpp)
/*
* 程序名:book220.cpp,此程序用于演示C++容器存放整数
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
#include <vector> // vector需要的头文件
#include <algorithm> // sort函数需要的头文件
int main ()
{
int height=0; // 存放从键盘输入的超女身高
std::vector<int> vheight; // 存放超女身高的容器
while (true)
{
printf("请输入超女身高(0-结束输入):");
scanf("%d",&height); // 接受键盘输入的数据
if (height==0) break; // 0-结束输入
vheight.push_back(height); // 把数据追加入容器
}
for (int ii=0;ii<vheight.size();ii++) // 显示排序前容器中的记录
{
printf("vheight[%d]=%d\n",ii,vheight[ii]);
}
sort(vheight.begin(),vheight.end()); // 容器中的记录排序
for (int ii=0;ii<vheight.size()