目录
前言:
vector(向量):
set(集合):
string(字符串):
map(地图)
queue(队列)
stack(栈)
pair(对)
最近在备考CSP,别人推荐看胡凡大神的《算法笔记》,看到STL部分觉得特别有用,所以就整理了一下,把每一种容器的使用都列了出来,供需要的人参考~
大家可以通过目录跳转到相应容器,每个部分都把重要的使用方法使用了一遍,并加了注释,大家可以根据注释理解一下。
其实就相当于大小可变的数组,比较适合元素类型确定,但数目未知的情况。
#include
#include
using namespace std;
int main(){
vector vec; // 定义一个vector
vector arr1[5]; //含有5个vector的vector数组 (只有一个维度的大小可变)
vector > arr2; // vector数组 (两个维度的长度都可变)
// 为arr2赋值并输出
for(int i=0;i<5;i++){
vector temp;
for(int j=0;j<5;j++){
temp.push_back(j);
}
arr2.push_back(temp);
}
cout<<"数组arr2的值为:"<::iterator it=vec.begin();it!=vec.end();it++){
cout<<*it<<" ";
}
vector::iterator it = vec.begin();
vec.insert(it+2,-1); // 在下标为2的位置插入-1
cout<::iterator it=vec.begin();it!=vec.end();it++){
cout<<*it<<" ";
}
it = vec.begin();
vec.pop_back();
cout<::iterator it=vec.begin();it!=vec.end();it++){
cout<<*it<<" ";
}
it = vec.begin()+2;
vec.erase(it);
cout<::iterator it=vec.begin();it!=vec.end();it++){
cout<<*it<<" ";
}
vec.clear();
cout<
内部自动排序,并且自动删除重复元素。
/*
* set是内部自动有序且不含重复元素的容器
* 只能通过迭代器访问
*/
#include
#include
#include
//#include
using namespace std;
int main(){
set st; //定义单个set
st.insert(12); //插入元素5,自动排序并去重
for(int i=0;i<10;i++){
st.insert(i);
}
set::iterator it=st.find(5); // 查找元素5,并返回其迭代器
for(auto i=st.begin();i!=st.end();i++){
cout<<*i<<" ";
}
cout< mu; // 只拍序,不去重
unordered_set un; // 只去重,不排序
mu.insert(5);
un.insert(20);
for(int i=0;i<10;i++){
mu.insert(10-i);
un.insert(10-i);
}
cout<
这个很常用,就不过多赘述了
#include
using namespace std;
int main(){
string str;
str="hello world.";
cout<
相当于字典类型,可以把元素关联起来
/*
*map会自动根据键值从小到大排列
*键值是唯一的
*可通过下标和迭代器两种方式访问
*/
#include
#include
其实和vector挺像的,都可以加入不定数量的元素,但不同的是,queue只能操作队首和队尾的元素,而不能通过下标访问。另外还有优先级队列(priority_queue)
/*
*只能通过front()来访问队首元素;用back()访问队尾元素
*/
#include
#include
using namespace std;
int main(){
queue q;
q.push(10); // push(x) x入队
q.push(8);
q.push(12);
cout< pq;
for(int i=0;i<10;i++){
pq.push(10-i);
}
cout<,less > pq1; // less表越大优先级越大,因为从队首开始越来越小,所以队首最大,greater相反
priority_queue,greater > pq2;
for(int i=0;i<10;i++){
pq1.push(10-i);
pq2.push(10-i);
}
cout<<"less的优先级队列(从大到小排列):"<"
return f1.price < f2.price;
}
};
priority_queue f1; // 之后就可以直接定义fruit类型的优先级队列,内部就是以价格高的水果为高优先级
// 2.利用cmp函数
struct fruit{
string name;
int price;
};
struct cmp{
bool operator()(fruit f1, fruit f2){
return f1.price > f2.price;
}
};
priority_queue,cmp> q;
return 0;
}
栈是一种先进后出的数据结构
#include
#include
using namespace std;
int main(){
stack sk;
for(int i=0;i<10;i++){
sk.push(i);
}
cout<<"一共有"<
可以把连个数据连成一个元素,一般把它和map配合使用
#include
#include
#include