C++STL——Vector
Vector
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
以int类型为例,创建数组:vector
包含函数(常用)
- push_back():将元素插入到容器的尾部
- pop_back():将最后一个元素移除
- front():返回容器中的第一个元素
- back():返回容器中最后一个元素
- begin(),end()
- size():返回容器的大小
- sort(a.begin(),a.end()):默认是由小到大将容器中的元素排序.若想要由大到小需要重写函数。需要头文件algorithm
- reverse(a.begin(),a.end()):容器中元素由大到小排序
- clear():清空容器
- empty():判断Vector是否为空(返回true时为空)
- erase():删除指定元素,需要用到迭代器
- swap(): 交换元素
删除某个元素
注意它是需要使用迭代器删除的
vector<int>::iterator itor;
for(itor=a.begin();itor!=a.end();)
{
if(*itor == 13)//使用迭代器逐个对比,一样的就删掉,然后++判断下一个
{
itor=a.erase(itor);
}
else
{
itor++;
}
}
交换元素
vector<int> vet;
vet.push_back(12);
vet.push_back(13);
swap(vet[0],vet[1]);
访问方式
其访问可以使用获得数组的大小,然后以数组的方式a[i]来访问;也可以使用迭代器来访问
vector<int>::iterator iter;
for(iter = a.begin();iter!=a.end();iter++)
cout<<*iter<<" ";
二维数组的建立
在代码中给出
代码
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void create_er();
void test(vector<int> a);
int main()
{
vector<int> a;
//插入只能用push_back()的方式
a.push_back(12);//插入函数,将数值插入到数组的最后一个
a.push_back(13);
a.push_back(14);//它的存储方式是12 13 14.先进先出
test(a);
cout<<"数组的第一个成员:"<<a.front()<<endl;//注意这里的front函数
cout<<"数组的大小:"<<a.size()<<endl;
// a.pop_back();//移除最后一个元素
//vector的输出方式和数组一样
//可以使用sort来排列容器中的元素,但是需要引入algorithm
cout<<"使用sort使vector中元素由小到大排序"<<endl;
sort(a.begin(),a.end());//由小到大
for(int i = 0;i<a.size();i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
//
cout<<"使用sort使reverse中元素由大到小排序"<<endl;
reverse(a.begin(),a.end()); //由大到小
for(int i = 0;i<a.size();i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
//容器中元素的访问输出除了可以使用如上述的数组访问的方式,
//还可以利用迭代器来进行数据的输出
//
//使用迭代器输出
vector<int>::iterator iter;
for(iter = a.begin();iter!=a.end();iter++)
{
cout<<*iter<<" ";
}
// a.clear();//清除容器中所有的元素
//判断此时的vector容器是否为空
if(a.empty())//empty()函数,如果容器为空,则返回true
cout<<"empty"<<endl;
// create_er();
return 0;
}
void create_er()
{
//二维数组的建立
int N = 5,M = 6;
//方式一
vector<vector<int> > obj(N);//二维数组的定义式
for(int i = 0;i<obj.size();i++)
{
obj[i].resize(M);//定义为N行M列的二维数组
}
//方式二
// vector<vector<int> >obj(N,vector<int>(M));
//二维数组的输出
for(int i = 0;i<obj.size();i++)
{
for(int j = 0;j<obj[i].size();j++)
{
cout<<obj[i][j];
}
cout<<endl;
}
}
void test(vector<int> a){
cout<<"vector传入了函数"<<endl;
cout<<"fun里的"<<a[1];
}