STL-Library-Containers
STL-Library-Containers
✏️ 关于专栏:专栏用于记录
prepare for the coding test
。
文章目录
- STL-Library-Containers
- 📝 常用容器
- 🧩向量vector
- 🧩栈stack
- 🧩队列
- 🧩优先队列priority_queue
- 🧩集合set
- 🧩映射map
- 🌟 总结
📝 常用容器
-
顺序容器
- array
- vector
- deque
- list
-
关联容器
- set
- map
-
无序关联容器
- unordered_set
- unordered_map
-
容器适配器
- stack
- queue
- priority_queue
-
字符串
- string
-
对与元组
- pair
- tuple
🧩向量vector
构造
vector<int> arr;//构造int数组
vector<int> arr(100);//构造初始长100的int数组
vector<int> arr(100,1);//构造初始长100的int数组,初值为1
vector<vector<int>>mat(100,vector<int>());//构造初始100行,不指定列数的二维数组
vector<vector<int>>mat(100,vector<int>(100,1));//构造初始100行,初始100列的二维数组,初值为1
尾接&尾删
.push_back(元素):在vector尾接一个元素,数组长度+1
.pop_back():删除vector尾部的一个元素,数组长度-1
Others
//中括号运算符
[]
//获取长度
.size()
//清空
.clear()
//判空
.empty()
//改变长度
.resize(新长度,[默认值])
//如果是缩短,则删除多余的值
//如果是扩大,且指定了默认值,则新元素均为默认值
🧩栈stack
构造:stack<类型> stk;
进栈:.push(元素);
出栈:.pop();
取栈顶:.top();
查看大小:.size()
清空:.clear()
判空:.empty()
不可访问内部元素!
🧩队列
构造:queue<类型> que;
进队:.push(元素);
出队:.pop();
取队首:.front()
取队尾:.back()
查看大小:.size()
清空:.clear()
判空:.empty()
不可访问内部元素!
🧩优先队列priority_queue
构造:priority_queue<类型,容器,比较器> pque;
类型:要存储的数据类型
容器:存储数据的底层容器,默认为vector<类型>
比较器:比较大小使用的比较器,默认为less<类型>,可自定义
priority_queue<int> maxHeap;
priority_queue<int,vector<int>,greater<int>> minHeap;
进堆:.push(元素)
出堆:.pop()
取堆顶:.top()
查看大小:.size()
判空:.empty()
只可访问堆顶,其它元素都无法读取到。
🧩集合set
set<类型,比较器> st;
类型:要存储的数据类型。
比较器:比较大小使用的比较器,默认为less<类型>,可自定义
set<int> st1;//存储int的集合(从小到大)
set<int,greater<int>> st2;//存储int的集合
遍历
for(set<int>::iterator it = st.begin();it!=st.end();it++){cout<<*it<<endl;
}
for(auto &ele : st){cout<<ele<<endl;
}
插入元素:.insert(元素)
删除元素:.erase(元素)
查找元素:.find(元素)
判断元素是否存在.count(元素)
🌟set虽说可遍历,但仅可使用迭代器进行遍历,它不存在下标这一概念,无法通过下标访问到数据。
🌟set的迭代器取到的元素是只读的(因为是const迭代器),不可修改其值,如果要改,需要先erase再insert。
🌟set迭代器不能像vector一样相减得到下标。
🧩映射map
map<键类型,值类型,比较器> mp;
键类型:要储存键的数据类型
值类型:要存储值的数据类型
比较器:键比较大小使用的比较器,默认为less<类型>,可自定义
map<int,int> mp1;//int->int的映射(键从小到大)
map<int,int,greater<int>> mp2;//int->int的映射(键从大到小)
遍历
for(map<int,int>::iterator it = mp.begin();it != mp.end();it++){cout<<it->first<<' '<<it->second<<endl;
}
for(auto &pr : mp)cout<<pr.first<<' '<<pr.second<<endl;
for(auto &[key,val] : mp){cout<<key<<' '<<val<<endl;
}
增/改/查 []
查元素(返回迭代器).find(元素)
删除元素 .erase(元素)
判断元素是否存在 .count(元素)
查看大小/清空/判空 .size() .clear .empty()
🌟如果使用中括号访问map的对应的键不存在,那么会新增这个键,并且值为默认值,因此中括号会影响键的存在性。
map<char,int> mp;
cout<<mp.count('a')<<endl;//0
mp['a'];
cout<<mp.count('a')<<endl;//1
cout<<mp['a']<<endl;//0
不可使用迭代器计算下标。
map的迭代器不能像vector一样相减得到下标。
🌟 总结
❤️ 如果对你有帮助,别忘了点赞、收藏支持一下,我将持续更新更多高质量刷题笔记!
📘 点击查看 👉 算法笔记专栏:Prepare for the Coding Test