常用STL容器及其成员函数
常用STL容器及其成员函数

本人整理了一些常用的STL容器及其成员函数,该文章整理自UP主ChrisKim_ZHT的视频BV1L8411y7th,不过只整理了容器部分,其余部分有待他日继续学习。

—以下是正文—

1. 向量——vector

与数组类似的一种STL容器,但其大小可以在运行过程中改变。

std::vector<int> vec(3,1);//初始化其大小为3,初值为1
  1. vec.push_back(1);【尾接】
  2. vec.pop_back();【尾删】
  3. vec.clear();【清空】
  4. vec.empty()【返回是否为空】
  5. vec.size()【返回大小】
  6. vec.resize(5,3);【将vec空间重置为5,多出来的空间初始化为3】

注意:

  1. 需要引入头文件vector。
  2. 在声明vector时尽量初始化其空间大小,用push_back()函数扩大向量空间时有额外时间开销。
  3. size()函数返回的类型数据存储范围较小,小心其溢出。
  4. vector与数组一样使用方括号运算符访问。

2. 栈——stack

在该STL容器中数据先进后出,数据从下到上堆叠储存,只能访问最顶部(也就是最新添加)的数据。

std::stack<int> stk;
  1. stk.push(1);【进栈】
  2. stk.top()【返回栈顶值】
  3. stk.pop();【出栈】
  4. stk.size()【返回大小】
  5. stk.empty()【返回是否为空】

注意:

  1. 需要引入头文件stack。
  2. vector可以当成栈来用。
  3. 只有栈顶可以访问,栈内部的数据不可访问。

3. 队列——queue

在该STL容器中数据先进先出,数据从前到后次序储存,只能访问最前面(也就是最先添加)的数据

std::queue<int> que;
  1. que.push(1);【进队】
  2. que.front()【返回队首值】
  3. que.back()【返回队尾值】
  4. que.pop();【出队】
  5. que.size()【返回队列大小】
  6. que.empty()【返回是否为空】

注意:

  1. 需要引入头文件queue。
  2. 与栈类似,队列内部的数据不可访问。

4. 优先队列(堆)——priority_queue

在该STL容器中,数据从大到小(默认)或从小到大(可选)储存,只能访问最顶端(也就是最大/最小)的数据

priority_queue<int> pque;//默认大顶堆
priority_queue<int,vector<int>,greater<int>> pque;//小顶堆
  1. pque.push(1);【进堆】
  2. pque.top()【返回堆顶值】
  3. pque.pop();【出堆】
  4. pque.size()【返回堆大小】
  5. pque.empty()【返回堆是否为空】

注意:

  1. 需要引入头文件queue。
  2. 在声明小顶堆时,三处数据类型都应填堆中储存的数据类型。
  3. 与队列相似,堆内部的数据不可访问。
  4. 通过类似example.top()=5;的语句给堆顶数据赋值是错误的,堆顶值不可直接修改。

5. 集合——set

集合三要素 解释 set multiset unordered_set
确定性 一个元素要么在集合中,要么不在
互异性 一个元素仅可以在集合中出现一次 ❌(任意次)
无序性 集合中的元素是没有顺序的 ❌(从小到大) ❌(从小到大)
set<int> st;
  1. st.insert(1);【插入元素】
  2. st.erase(1);【擦除元素】
  3. st.find(3)【查找元素,找到则返回指向该元素的迭代器,否则返回伪迭代器xxx.end()
  4. st.count(1)【返回元素在集合中的数量】
  5. st.size()【返回集合大小】
  6. st.clear();【清空集合】
  7. st.empty()【返回集合是否为空】

注意:

  1. 需要引入头文件set。
  2. set只能用迭代器遍历,不能使用中括号下标访问。
  3. set中的元素是只读的,不能修改其值。
  4. 不可用迭代器相减得到下标。

6. 映射——map

该STL容器提供从键到值的映射

性质 解释 map multimap unordered_map
互异性 一个键仅可以在映射中出现一次 ❌(任意次)
无序性 键是没有顺序的 ❌(从小到大) ❌(从小到大)
map<int,int> mp;
  1. mp[2]=1;【增加键2映射到1】
  2. mp[2]=2;【修改2映射到2】
  3. mp.find(2)【查找键,找到则返回指向该键的迭代器,否则返回伪迭代器xxx.end()
  4. mp.erase(2);【擦除键及其映射】
  5. mp.count(2)【返回键在map中出现的次数】
  6. mp.size()【返回map的大小】
  7. mp.clear();【清空map】
  8. mp.empty()【返回map是否为空】

注意:

  1. 需要引入头文件map。
  2. map中不存在的键对应的值默认为0。
  3. map中的键默认按从小到大排序(字符/字符串按字典序),若需要从大到小排序可在声明时添加参数greater()。

7. 字符串——string

顾名思义,用于储存字符串的STL容器

string s="QAQ";
  1. cin>>s;【读入字符串】
  2. cout<<s;【输出字符串】
  3. s="awa";【赋值】
  4. s[0]='b';【修改第0位字符为b】
  5. s1==s2【判断两字符串是否相等】
  6. s1+s2【连接两个字符串】
  7. s.size()【返回字符串的大小】
  8. s.erase(0,1);【删除从字符串第0位开始的1个字符(不加第二个参数默认从起始位一直删到最后一位)】
  9. s.substr(3,4)【返回从第三位开始,长度为4的子字符串(不加第二个参数默认到最后一位)】
  10. s.find("123")【在字符串中查找子字符串123,若找到返回指向子字符串第一位字符的迭代器,若未找到返回string::npos
  11. stoi(s)【将字符串转化为int型并返回(转化为其他变量类型也可,long long用ll,long double用ld,double用d,float用f,以此类推)】
  12. to_string(x)【将其他类型变量x转化为string并返回】

注意:

  1. 需要引入头文件string。
  2. 向string尾接字符或字符串时建议用s+='a';而非s=s+'a';,使用后一种方法容易超时。
  3. 要注意substr()函数的第二个参数是子字符串的长度而非子字符串的终点下标。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇