一、vector 的概念
在 C++ 中,vector是一个十分有用的容器。
-
它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
-
有些时候想开一个数组但却不知道开多大的数组比较好,因为数组的长度可能会有变化,这时候我们就需要运用到动态数组,也就是不定长数组vector。
二、vector 的基本操作
使用STL标准库的 vector 时,应包含头文件:#include <vector>
1、vector 的定义
定义int型数组:
vector<int> vec; //定义一个int型向量
vector<int> vec(a); //用 a 定义(初始化)vec
vector<int> vec(10); //vec有10个值为0的元素
vector<int> vec(10,1); //vec初始有10个值为1的元素
vector<vector<int>> vec; //定义一个int型二维向量
vector<int>::iterator it; //定义一个int型迭代器
定义string型数组:
vector<string> vec(10,"null"); //vec初始有10个值为"null"的元素
vector<string> vec(10,"hello"); //vec初始有10个值为"hello"的元素
vector<string> vec(a.begin(),a.end()); //vec是a的复制
定义结构型数组:
struct point{ int x,y; };
vector<point> vec; //vec用来存坐标
2、vector 的基本操作
vec.push_back(); //在数组的尾部添加一个元素
vec.pop_back(); //去掉数组的最后一个元素
vec.begin(); //得到数组头的指针,用迭代器接受
vec.end(); //得到数组的最后一个元素+1的指针
vec.clear(); //清空容器中所有元素
vec.empty(); //判断容器是否为空
vec.erase(vec.begin()+i, vec.end()+j); //删除[i,j)区间的元素
vec.erase(vec.begin()+i); //删除第i+1个元素
vec.insert(vec.begin()+i, a); //在第i+1个元素前面插入a
vec.insert(vec.end(), 10, a); //尾部插入10个值为a的元素
vec.insert(pos,data); //在pos处插入数据
vec.size(); //返回容器中实际元素的个数
vec.back(); //返回尾部元素
vec.front(); //返回头部元素
vec.resize(n); //数组大小变为n
reverse(vec.begin(), vec.end()) //用函数reverse()翻转数组
sort(vec.begin(), vec.end()) //用函数排序,默认从小排到大
三、vector 的用法
1、基本用法:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp(const int &a,const int &b){
return a>b;
}
int main(){
vector <int> v;
vector<int>::iterator it; //定义一个vector迭代器it
for(int i = 10; i >= 1; i--)
v.push_back(i);
cout<<"输出:";
for(it=v.begin(); it!=v.end(); it++) //使用迭代器访问元素
cout<<*it<<" ";
cout<<endl;
//输出:10 9 8 7 6 5 4 3 2 1
it-=1; //最后循环会再+1,所以这里要减掉1
reverse(v.begin(),v.end()); //翻转数组
cout<<"翻转后:";
for(it=v.begin(); it!=v.end(); it++)
cout<<*it<<" ";
cout<<endl;
//翻转后:1 2 3 4 5 6 7 8 9 10
it-=1;
cout<<"最后一个的值为:"<<*it<<" "<<endl;
//最后一个的值为:10
v.erase(it); //删除最后一个元素
cout <<"元素个数:" <<v.size() << endl;
//元素个数:9
sort(v.begin(), v.end());
cout<<"排序后:";
for(int i=0; i<v.size(); i++)
cout <<v[i]<< " "; //使用下标访问元素
cout<<endl;
//排序后:1 2 3 4 5 6 7 8 9
v.erase(v.begin()+2);
//结果:1 2 4 5 6 7 8 9
sort(v.begin(), v.end(),cmp);
cout<<"降序排序后:";
for(int i=0; i<v.size(); i++)
cout <<v[i]<< " "; //使用下标访问元素
cout<<endl;
//降序排序后:9 8 7 6 5 4 2 1
v.insert(v.begin(),100) ; //在pos位置插入一个elem
cout<<"第一个元素为:" <<v.front()<<endl;
//第一个元素为:100
v.pop_back();
cout << "元素个数:" <<v.size() << endl;
//元素个数:8
v.clear(); //vector清空
cout <<"清空后元素个数:" << v.size() << endl;
//清空后元素个数:0
return 0;
}
输出结果:
2、二维数组的用法:
#include <vector>
#include <iostream>
using namespace std;
int main(){
int a[3][2] = { 1, 2, 3, 4, 5, 6 };
vector <int*> v;
v.push_back(a[0]);
v.push_back(a[1]);
v.push_back(a[2]);
cout << v[0][0] << endl;//1
cout << v[0][1] << endl;//2
cout << v[1][0] << endl;//3
cout << v[1][1] << endl;//4
cout << v[2][0] << endl;//5
cout << v[2][1] << endl;//6
return 0;
}
输出结果:
3、插入操作的其他用法
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
//创建一个vector,并置入字母表的前十个字符
vector <char> v;
for(int i=0; i<10; i++ )
v.push_back(i+65);
//定义一个迭代器,并初始化为第一个元素
vector <char>::iterator it = v.begin();
v.insert(it,4,'C'); //插入四个C到vector中
//显示vector的内容
for( it = v.begin(); it != v.end(); it++ )
cout << *it;
return 0;
}
输出结果:
CCCCABCDEFGHIJ