vector
#include<bits/stdc++.h>
/*
将元素置于一个动态数组中加以管理,
可以随机存取元素(用索引直接存取),
数组尾部添加或移除元素非常快速。
但是在中部或头部安插元素比较费时,
方便尾部读取数据
*/
using namespace std;
const int N=10;
void Print(vector<int> vec)
{
for(int i=0;i<vec.size();i++)
{
cout<<vec[i]<<" ";
}
}
void Print1(vector<int> vec)
{
//迭代器用法
for(vector<int>::iterator it=vec.begin();it!=vec.end();it++)
{
cout<<*it<<" ";
}
}
int main()
{
vector<int> vec;//声明一个vector
for(int i=0;i<N;i++)
{
vec.push_back(i);//入栈
}
Print(vec);
cout<<endl;
Print1(vec);
vec.pop_back();//退栈
vec.pop_back();
cout<<endl;
Print(vec);
vec[5]=100;//赋值
cout<<endl;
Print(vec);
vec.clear();//清除
cout<<endl;
cout<<vec.size();
return 0;
}
stack
#include<bits/stdc++.h>
using namespace std;
stack<int> st;
/*
stack,栈的一些操作!
*/
int main()
{
st.push(1);//入栈
st.push(2);
cout<<st.top();//取栈尾元素
st.pop();//出栈
cout<<" "<<st.top();
cout<<endl<<st.size();
return 0;
}
set
#include<bits/stdc++.h>
using namespace std;
const int N=10;
set<int>st;
/*
集合中不会存在重复元素,支持高效的插入、删除和查询操作,复杂度均是O(logn)
(对比使用数组来实现,虽然插入的时间复杂度O(1),但是删除和查询的时间复杂度却是O(n))。
*/
typedef struct book
{
double price;
string name;
}book;
struct Rule
{
bool operator()(const book&b1,const book&b2)
{
return b1.price>b2.price;
}
};
void Print(set<int> st)
{
for(set<int>::iterator it=st.begin();it!=st.end();it++)
{
cout<<*it<<" ";
}
};
struct Rule1
{
bool operator()(const int&a,const int&b)
{
return a>b;
}
};
int main()
{
for(int i=0;i<N;i++)
st.insert(i);//高效插入元素
st.erase(1);//删除元素
set<int>::iterator it=st.find(2);//查找元素,返回值是迭代器
cout<<*it<<endl;
cout<<st.empty()<<endl;
Print(st);
cout<<endl;
//自定义排序
set<int,Rule1>st2;
for(int i=0;i<N;i++)
st2.insert(i);
for(set<int,Rule1>::iterator it=st2.begin();it!=st2.end();it++)
cout<<*it<<" ";
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=10;
struct Rule
{
bool operator()(const int &a,const int &b)
{
return a>b;
}
};
void Print(set<int,Rule>st)
{
for(set<int>::iterator it=st.begin();it!=st.end();it++)
cout<<*it<<" ";
}
int main()
{
set<int,Rule>st;
for(int i=0;i<N;i++)
st.insert(i);
Print(st);
return 0;
}
map
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<int,string> mapStudent;
mapStudent.insert(pair<int,string>(0,"student_zero"));//插入数据
mapStudent[1]="student_first";
mapStudent.insert(map<int,string>::value_type(2,"student_second"));
map<int,string>::iterator it=mapStudent.find(1);
cout<<it->first<<" "<<it->second<<endl;
cout<<"遍历开始"<<endl;
mapStudent.erase(1);
for(map<int,string>::iterator it=mapStudent.begin();it!=mapStudent.end();it++)
cout<<it->first<<" "<<it->second<<endl;
return 0;
}
queue
#include<bits/stdc++.h>
using namespace std;
const int N=10;
/*
FIFO
*/
queue<int>que;
int main()
{
for(int i=0;i<N;i++)
{
que.push(i);
}
cout<<que.empty()<<" ";//判断是否为空
cout<<que.back()<<" ";//访问队尾元素
cout<<endl<<que.size()<<" ";
while(que.size())
{
cout<<que.front()<<" ";//取队首元素
que.pop();//队首出队
}
return 0;
}
priority_queue
#include<bits/stdc++.h>
using namespace std;
//实质就是二叉堆,使用该模版可以快速实现小根堆、大根堆。插入、删除、查询的时间复杂度均是O(logn)。
//定义:priority_queue<Type, Container, Functional>
/*Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,
但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式。
当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆。*/
struct Rule
{
bool operator()(const int &a,const int &b)
{
return a>b;//最小堆
}
};
int main()
{
priority_queue<int,vector<int>,Rule>q;
q.push(2); //[2]
q.push(1); //[2,1]
q.push(3); //[3,2,1]
int n=q.size();
for(int i=0;i<n;i++)
{
cout<<q.top()<<" ";
q.pop();
}
return 0;
}