1.vector
//定义vector数组 vector<数据类型> 名字(长度,初值)
//vector<int> arr; //定义名为arr的vector数组
vector<int> arr(10,1); //定义长度为10且初值全为1的vector数组
arr.push_back(1); //在数组尾部接入数字1
arr.pop_back(); //把数组尾部的元素删除
arr.size(); //获取数组的长度
//cout<<arr.size()<<endl;
arr.clear(); //快速清空vector数组
arr.empty(); //判空(如果是空的就返回true(1),非空的就返回false(0))
//if(!empty()) 如果vector数组非空
arr.resize(5,3); //改变vector数组的长度,长度变为5并初始化为3(没有初始化则默认为0)
//第一个参数为新长度,第二个参数为初始值(改长会设初值为0,改短会删除元素)
//优化前:522ms
vector<int> a;
for(int i=0;i<1e8;i++)
a.push_back(i);
//优化前:259ms
vector<int> a(1e8); //提前声明vector数组长度
for(int i=0;i<a.size();i++)
a[i]=i;
2.栈 stack
//定义栈 stack<数据类型> 名字
//stack<int> stk; //定义名为stk的栈
stack<double> stk;
stk.push(2.0); //进栈
cout<<stk.top()<<endl; //输出栈顶元素
stk.pop(); //弹出栈顶
cout<<stk.size()<<endl; //输出栈的长度
cout<<stk.empty()<<endl; //判空
//不能访问内部元素(下面是错误用法error)
for(int i=0;i<stk.size();i++)
cout<<stk[i]<<endl;
3.队列 queue
//定义队列 queue<数据类型> 名字
//queue<int> que; //定义名为que的队列
queue<int> que;
que.push(2); //进队
que.pop(); //出队(对头弹出)
cout<<que.front()<<endl; //输出队头元素
cout<<que.back()<<endl; //输出队尾元素
cout<<que.size()<<endl; //输出队列长度
cout<<que.empty()<<endl; //判空
//不能访问内部元素(下面是错误用法error)
for(int i=0;i<que.size();i++)
cout<<que[i]<<endl;
4.优先队列(堆) priority_queue
//定义优先队列 priority_queue<数据类型,容器,比较器> 名字
//priority_queuq <int> pque 容器默认为vector<数据类型> 比较器默认为less<数据类型>
priority_queue<int> pque; //默认大顶堆(堆顶元素最大)
pque.push(1); //加入堆元素
cout<<pque.top()<<endl; //输出堆顶元素
pque.pop(); //弹出堆顶元素
priority_queuq <int,vector<int>,greater<int>> pque1;//变成小顶堆(堆顶元素最小)
//只能访问堆顶元素,不能访问其他元素,所有元素也不可赋值(下面是错误用法error)
cout<<pque[1]<<endl;
//可以修改堆顶元素
int temp=pque.top();
pque.pop();
pque.push(temp+1);
5.集合 set
//定义集合 set<数据类型,比较器> 名字
//set<int> st 比较器默认为less<数据类型>
set<int> st1; //储存int的集合(从小到大)
set<int,greater<int>> st2; //储存int的集合(从大到小)
st.insert(1); //插入元素
st.erase(1); //删除元素
st.find(1); //查找元素(如果找到1则返回指向1的迭代器,否则返回尾迭代器)
if(st.find(1)!=st.end())
{
cout<<"yes"<<endl;//表示找到这个元素
}
st.count(); //判断集合中的元素是否存在(set只有0/1两种返回值)
cout<<st.size()<<endl; //输出集合元素个数
st.clear(); //清空
st.empty(); //判空
for(set<int>::iterator it=st.begin();it!=st.end();++it)//遍历(it是变量名)
cout<<*it<<end;
/*
集合适用情形
元素去重:[1,1,3,2,4,4]->[1,2,3,4]
维护顺序:[1,5,3,7,9]->[1,3,5,7,9]
元素是否出现过:元素大小[-1e18,1e18],元素数量1e6,数组无法实现可通过set完成
*/
//不存在下标索引(下面是错误用法error)
cout<<st[0]<<endl;
6.映射 map
//定义映射 map<键类型,值类型,比较器> 名字 键类型为要储存键的数据类型,值类型为要储存值的数据类型
//map<int,int> mp1; 比较器默认为less<数据类型>
map<int,int> mp; //int->int的映射(键从小到大)
//map<int,int,greater<int>> mp2; //int->int的映射(键从大到小)
mp[2]=1; cout<<mp[2]; //输出1 (如果没有初始化则默认为0)
mp[2]=2; cout<<mp[2]; //可修改
if(mp.find(2)!=mp.end()) //查询,返回查询到的元素所在迭代器
{
cout<<"yes";
}
mp.erase(2); //删除2键元素
cout<<mp.count(2)<<endl; //判断元素是否存在(只有0/1两种返回值)
cout<<mp.size()<,endl; //计算元素长度
mp.clear(); //清空
mp.empty()<<endl; //判空
for(map<int,int>::iterator it=mp.begin();it!=mp.end();++it) //遍历
cout<<it->first<<' '<<it->second<<endl; //first是键,second是值
//实例操作:统计单词出现次数
void test()
{
map<string,int> mp;
vector<string> word;
word.push_back("abc");
word.push_back("abc");
word.push_back("ABC");
for(int i=0;i<word.size();i++) mp[word[i]]++;
for(map<int,int>::iterator it=mp.begin();it!=mp.end();++it)
cout<<it->first<<' '<<it->second<<endl;
}
7.二元组 pair
//定义二元组 pair<数据类型,数据类型>
//pair<int,int> p1;
pair<int,int> p1=make_pair(1,2); //定义一个二元组并分别赋值为1,2(老式)
//pair<int,int> p2={1,2};(新式)
cout<<p.first<<' '<<p.second<<endl; //访问第一个元素和第二个元素
if(p1==p2) cout<<"yes"; //可判同
8.排序 sort
//默认从小到大排序
sort(a,a+n,greater<int>()//将数组a从大到小排序