二、标准库vector类型
1.包含头文件 #include<vector>
vector不是一种数据类型,而只是一个类模板。vector<int> 、 vector<CStudent>是数据类型
2.vector的定义和初始化
它的初始化有如下几种方式:
Vector<T> v1 ; // 默认构造函数v1为空
Vector<T> v2(v1) ; // v2是v1的一个副本
Vector<T> v3(n, i) ; // v3包含n个值为i的元素
参数 T 如果是类类型则一定要有拷贝构造函数(未定义的情况下系统会自动分配一个)
Vector<T> v4(n) ; // v4含值初始化的元素个副本
参数 T 如果是类类型则一定要有默认构造函数(未定义的情况下系统会自动分配一个) 如果是内置类型则分配n个0
对于类类型如果不能满足红色标示的要求编译会失败。 关于类类型的拷贝构造函数和默认构造函数后续章节有介绍
3.vector对象的操作
v.push_back(t) ; // 在数组的最后添加一个值为t的数据
v.size() ; // 当前使用数据的大小
返回vector<T>::size_type类型的长度值,例如:vector<int>::size_type,其意义类似上面讲过的string::size_type
v.empty() ; // 判断vector是否为空
v[n] ; // 返回v中位置为n的元素 和string类型下标操作类似 是个左值操作
v1=v2 ; // 把v1的元素替换为v2元素的副本
v1==v2 ; // 判断v1与v2是否相等
!=、<、<=、>、>= ; // 保持这些操作符惯有含义
4.vector下标操作
vector下标操作与string下标操作类似,需要注意的是:
1)下标操作的vector<T>不能为空,必须是已存在的元素才能用下标操作
vector<int> ivec;//空的vector cout<<ivec[0];//错误
因此下标操作不能用于添加元素
vector<int> ivec; for(vector<int>::size_type ix=0;ix!=10;++ix) <span style="white-space:pre"> </span>ivec[ix]=ix;//err <span style="white-space:pre"> </span>ivec.push_back(ix);ok
2)下标操作不能越界