STL(Standard Template Library)是C++的标准模板库,竞赛中很多常用的数据结构、算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程。
vector容器是一个模板类,能存放任何类型的对象。
vector:动态数组,从末尾能快速插入与删除,直接访问任何元素
一、定义
- 定义int型数组(也可使char、double等类型)
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector< int >a;//默认初始化,a为空
vector< int >b(a);//用a定义b
vector< int >a(100);//a有100个值为0的元素
vector< int >a(100,6);//a有100个值为6的元素
}
- 定义string型数组
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector< string >a(10,"null");//10个值为null的元素;
vector< string >vec(10,"hello");//10个值为hello的元素
vector< string >b(a.begin(),a.end());//b是a的复制
}
- 定义结构型数组
#include<iostream>
#include<vector>
using namespace std;
struct point{
int x,y;
};
int main()
{
vector< point >a;//a用来存坐标
}
- 定义二维数组
vector<int>a[5];
它的一维大小是固定的,第二维是动态的,也可定义多维数组
简单应用:
#include<bits/stdc++.h>
#include<vector>//可不写
using namespace std;
int main()
{
vector<int>a[10];
for(int i=0;i<5;i++)
{
for(int j=0;j<4;j++)
{
a[i].push_back(5);
}
}
for(int i=0;i<5;i++)
{
for(int j=0;j<4;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
二、常用操作
- 赋值:在尾部添加元素
a.push_back(1);
- 元素个数
int size;
size=a.size();
cout<<size;
- 判断是否为空
bool isEmpty;
isEmpty=a.empty();
cout<<isEmpty;//若为空返回1,否则返回0
- 打印第一个元素
cout<<a[0]<<endl;
- 中间插入:在第i个元素前面插入k
a.insert(a.begin()+i,k);
- 尾部插入
插入单个元素
a.push_back(100);
插入多个元素
a.push_back(10,5);
- 删除尾部
a.pop_back();
- 删除区间:删除区间[ i , j-1 ]的元素
a.erase(a.begin()+i,a.begin()+j);//删除的是第i到第j-1个元素
- 删除元素:删除第i+1个元素
a.erase(a.begin()+i);
- 调整大小:数组大小变为n
a.resize(n);
- 排序:从小到大排(基于快排)
sort(a.begin,a.end);
- 翻转数组
reverse(a.begin,a.end);
- 清空
a.clear();
三、代码实现
下面是与上面对应得代码实现结果和详细代码:
#include<bits/stdc++.h>
#include<vector>
using namespace std;
int main()
{
vector<int>a;
a.push_back(100);
a.push_back(101);
a.push_back(102);
cout<<"元素个数:";
int size=a.size();
cout<<size<<endl;
cout<<"判断是否为空:";
bool isEmpty=a.empty();
cout<<isEmpty<<endl;
cout<<"打印第一个元素:";
cout<<a[0]<<endl;
cout<<"中间插入:";
a.insert(a.begin()+1,520);
cout<<"在第1个元素前插入520,输出四个元素:";
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
cout<<"尾部插入10个5"<<endl;
a.insert(a.end(),10,5);
cout<<"插入成功!"<<endl;
cout<<"删除区间[0,1]的元素后前两个元素为:";
a.erase(a.begin()+0,a.begin()+2);
cout<<a[0]<<" "<<a[1]<<endl;
cout<<"数组大小变为:";
a.resize(20);
cout<<a.size()<<endl;
cout<<"将前5个元素排序:";
sort(a.begin(),a.begin()+5);
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<endl;
cout<<"将前五个元素翻转:";
reverse(a.begin(),a.begin()+5);
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<endl;
cout<<"清空数组,大小变为:";
a.clear();
cout<<a.size();
}
来源:CSDN
作者:ker.
链接:https://blog.csdn.net/weixin_45895026/article/details/104087205