一、向量的介绍
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版,是可变长的动态数组,支持随机访问迭代器,所有 STL 算法都能对 vector 进行操作。
在使用它时, 需要包含头文件 vector, #include< vector>
二、vector声明及初始化
vector 型变量的声明以及初始化的形式也有许多, 常用的有以下几种形式:
vector<int> a ; //声明一个int型向量a
vector<int> a(10) ; //声明一个初始大小为10的向量
vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ; //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
int a[5] = {0, 1, 2, 3, 4};
vector<int> v4(a, a+5); //将数组n的前5个元素作为向量v4的初值,指定地址时,为首元素地址到最后一个元素的下一个地址。
vector<int> v4(a, *(&a + 1)); //将整个数组a中的元素作为v4初始值
vector<int> v4(&a[1], &a[4]) ; //将a[1] - a[4]范围内的元素作为向量a的初值,不包含a[4]
三、元素输入与访问
元素的输入和访问可以像操作普通的数组那样, 用cin>>进行输入, cout<<a[n]这样进行输出:
示例:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int arr[] = {1,2,3,4,5};
vector<int> a1(&arr[1],&arr[4]);
int size_a1 = a1.size();
cout<<"a1 size is:"<<size_a1<<endl;
cout<<"a1 is:";
for(int i=0;i<size_a1;i++)
{
cout<<" "<<a1[i];
}
cout<<endl;
return 0;
}
在元素的输出上, 还可以使用遍历器(又称迭代器)进行输出控制。在 vector b(a.begin(), a.begin()+3) ; 这种声明形式中, (a.begin()、a.begin()+3) 表示向量起始元素位置到起始元素+3之间的元素位置。(a.begin(), a.end())则表示起始元素和最后一个元素之外的元素位置。
向量元素的位置便成为遍历器, 同时, 向量元素的位置也是一种数据类型, 在向量中遍历器的类型为: vector::iterator。 遍历器不但表示元素位置, 还可以再容器中前后移动。
在上例中讲元素全部输出部分的代码就可以改写为:
//全部输出
vector<int>::iterator t ;
for(t=a.begin(); t!=a.end(); t++)
cout<<*t<<" " ;
*t 为指针的间接访问形式, 意思是访问t所指向的元素值。
四、元素输入与访问
- a.size() //获取向量中的元素个数
- a.empty() //判断向量是否为空
- a.clear() //清空向量中的元素
- a = b ; //将b向量复制到a向量中
- 比较
保持 ==、!=、>、>=、<、<= 的惯有含义 ;
如: a == b ; //a向量与b向量比较, 相等则返回1 - 插入 - insert
a.insert(a.begin(), 1000); //将1000插入到向量a的起始位置前
a.insert(a.begin(), 3, 1000) ; //将1000分别插入到向量元素位置的0-2处(共3个元素)