vector数组常用函数
vectorv 创建动态数组v,后面可以加{}或()进行初始化
type v[index] 获取v中第 index 个元素 O(1)
v.push_back(type item) 向v后⾯添加⼀个元素item O(1)
v.pop_back() 删除 v 最后⼀个元素 O(1)
v.size() 获取 v 中元素个数,返回size_type类型 O(1)
v.resize(int n) 把 v 的⻓度设定为 n 个元素 O(n)
v.empty() 判断 v 是否为空,空返回1,不空返回0,O(1)
v.clear() 清空 v 中的元素 O(size)
v.insert(iterator it,type x)向迭代器it指向元素前增加一个元素x,O(n)
v.erase(iterator it) 删除向量中迭代器指向元素,O(n)
v.front()返回首元素的引用O(1)
v.back()返回尾元素的引用O(1)
v.begin()返回首迭代器,即得到数组头的指针,指向第一个元素O(1)
v.end()返回尾迭代器,即得到数组最后一个单元+1的指针,指向向量最后一个元素的下一个位置O(1)
vector数组的创建
//vector的创建
#include <vector>
using namespace std;
int main()
{
vector<int>v1;
//创建一个存int类型的动态数组,int可以改成其它类型
vector<long long>v3(20);
//创建一个存long long类型的动态数组,长度为20,v[0]~v[19]默认为0
vector<string>v4(20,"zzuacm");
//创建一个存string类型的动态数组,长度为20,存的都是"zzuacm"
vector<int>v5[3];
//相当于存int的二维数组,一共3行,每行的列可变
vector<vector<int> >v5{{1,2},{1},{1,2,3}};//注意两个> >之间要加空格,否则会在旧的编译器下(Dev)会报错
//存int的二维数组,行和列都可变,初始状态
return 0;
}
函数实例1
int main()
{
vector<int>v;
for(int i=1;i<=5;i++)
v.push_back(i);//向动态数组中插入1~5
cout<<v.size()<<endl;//输出数组的大小,有几个值
for(int i=0;i<5;i++)
cout<<v[i]<<" ";//输出v[0]~v[4],也就是1~5
cout<<endl;
v.clear();//将v清空,此时size为0
v.resize(10);//为v重新开辟大小为10的空间,初始为0
for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";//遍历每一个元素
while(!v.empty())//当v还不空的话,去掉v的最后一个元素,等同于v.clear();
v.pop_back();
return 0;
}
函数实例2
int main()
{
vector<int>v{0,1,2,3,4};
v.erase(v.begin()+3);//删除v[3],v变为{0,1,2,4}
v.insert(v.begin()+3,666);//在v[3]前加上666,v变成{0,1,2,666,3,4}
v.front()=10;//将v[0]改成10,等同于v[0]=10;
v.back()=20;//将v[4]改成20等同于v[v.size()-1]=20;
for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";//使用下标访问的方法遍历v
cout<<endl;
for(auto i=v.begin();i!=v.end();i++)
cout<<*i<<" ";//使用迭代器,从v.begin()到v.end()-1
cout<<endl;
for(auto i:v)//使用C++11特性循环遍历v,如果需要改变i的值,还需要在前面加上&
cout<<i<<" ";//auto变量类型为自动变量类型,不用事先声明i是什么类型,会根据等于号自动识别
cout<<endl;
return 0;
}
vector数组排序
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<int>obj;
obj.push_back(1);
obj.push_back(3);
obj.push_back(0);
sort(obj.begin(),obj.end());//从小到大
cout<<"从小到大:"<<endl;
for(int i=0;i<obj.size();i++)
{
cout<<obj[i]<<",";
}
cout<<"\n"<<endl;
cout<<"从大到小:"<<endl;
reverse(obj.begin(),obj.end());//翻转数组,从大到小
for(int i=0;i<obj.size();i++)
{
cout<<obj[i]<<",";
}
return 0;
}
二维数组
//方法一
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N=5, M=6;
vector<vector<int> > obj(N); //定义二维动态数组大小5行
for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0
{
obj[i].resize(M);
}
for(int i=0; i< obj.size(); i++)//输出二维动态数组
{
for(int j=0;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
//方法二
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N=5, M=6;
vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列
for(int i=0; i< obj.size(); i++)//输出二维动态数组
{
for(int j=0;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
输出结果:
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0