【STL小结】

news/2024/11/25 23:35:38/

文章目录

    • 1. vector
    • 2. deque
    • 3. list
    • 4. set
    • 5. map

C++ STL(Standard Template Library)提供了多种容器类,分别用于存储不同类型的数据,满足不同的操作需求。下面介绍 STL 中常用的几种容器及它们的主要操作。

1. vector

vector 是 C++ STL 中最常用的动态数组类型,可以存储任意类型的对象。vector 通过数组实现,并且支持自动扩展大小以容纳新元素。vector 的主要操作包括:

  • push_back(elem):将元素添加到 vector 的末尾。
  • pop_back():从 vector 的末尾删除一个元素。
  • size():返回 vector 中元素的个数。
  • clear():清空 vector 中所有元素。
  • insert(pos, elem):在指定位置插入一个元素。
  • erase(pos):从 vector 中删除指定位置的元素。
  • front():返回 vector 的第一个元素。
  • back():返回 vector 的最后一个元素。

下面是 vector 的一个例子:

#include <iostream>
#include <vector>using namespace std;int main() {vector<int> vec;  // 声明一个 int 类型的 vectorvec.push_back(1);  // 添加元素vec.push_back(2);vec.push_back(3);cout << "vector size: " << vec.size() << endl;  // 输出元素个数for (int i = 0; i < vec.size(); ++i) {  // 遍历输出元素值cout << vec[i] << " ";}cout << endl;vec.pop_back();  // 删除最后一个元素vector<int>::iterator it;  // 声明一个迭代器for (it = vec.begin(); it != vec.end(); ++it) {  // 通过迭代器遍历 vector 容器cout << *it << " ";}cout << endl;return 0;
}

2. deque

deque(双端队列)是一种 STL 中的顺序容器,与 vector 类似,也是用数组实现的。deque 支持高效地在队列头部和尾部添加或删除元素,并且支持随机访问。deque 主要操作包括:

  • push_front(elem):将元素添加到 deque 的前面。
  • pop_front():从 deque 的前面删除一个元素。
  • push_back(elem):将元素添加到 deque 的末尾。
  • pop_back():从 deque 的末尾删除一个元素。
  • size():返回 deque 中元素的个数。
  • clear():清空 deque 中所有元素。
  • insert(pos, elem):在指定位置插入一个元素。
  • erase(pos):从 deque 中删除指定位置的元素。
  • front():返回 deque 的第一个元素。
  • back():返回 deque 的最后一个元素。

下面是 deque 的一个例子:

#include <iostream>
#include <deque>using namespace std;int main() {deque<int> dq;  // 声明一个 int 类型的 dequedq.push_back(1);  // 添加元素dq.push_front(2);dq.push_back(3);cout << "deque size: " << dq.size() << endl;  // 输出元素个数for (int i = 0; i < dq.size(); ++i) {  // 遍历输出元素值cout << dq[i] << " ";}cout << endl;dq.pop_front();  // 删除第一个元素deque<int>::iterator it;  // 声明一个迭代器for (it = dq.begin(); it != dq.end(); ++it) {  // 通过迭代器遍历 deque 容器cout << *it << " ";}cout << endl;return 0;
}

3. list

list(链表)是一种 STL 中的顺序容器,它使用链表实现。list 支持高效地在链表头部、尾部或任意位置添加或删除元素,并且支持双向迭代器进行遍历和访问。list 主要操作包括:

  • push_front(elem):将元素添加到 list 的前面。
  • pop_front():从 list 的前面删除一个元素。
  • push_back(elem):将元素添加到 list 的末尾。
  • pop_back():从 list 的末尾删除一个元素。
  • size():返回 list 中元素的个数。
  • clear():清空 list 中所有元素。
  • insert(pos, elem):在指定位置插入一个元素。
  • erase(pos):从 list 中删除指定位置的元素。
  • front():返回 list 的第一个元素。
  • back():返回 list 的最后一个元素。

下面是 list 的一个例子:

#include <iostream>
#include <list>using namespace std;int main() {list<int> li;  // 声明一个 int 类型的 listli.push_back(1);  // 添加元素li.push_front(2);li.push_back(3);cout << "list size: " << li.size() << endl;  // 输出元素个数list<int>::iterator it;  // 声明一个迭代器for (it = li.begin(); it != li.end(); ++it) {  // 通过迭代器遍历 list 容器cout << *it << " ";}cout << endl;li.pop_front();  // 删除第一个元素li.insert(li.begin(), 4);  // 在开头插入元素li.erase(--li.end());  // 删除最后一个元素for (int elem : li) {  // 遍历输出元素值cout << elem << " ";}cout << endl;return 0;
}

4. set

set 是一种 STL 中的关联容器,它存储有序且独一无二的元素集合。set 使用红黑树实现,因此支持高效查找和插入操作。set 主要操作包括:

  • insert(elem):将元素插入 set 中。
  • erase(key):从 set 中删除指定元素。
  • clear():清空 set 中所有元素。
  • find(key):查找是否存在指定元素。
  • size():返回 set 中元素的个数。
  • empty():判断 set 是否为空。

下面是 set 的一个例子:

#include <iostream>
#include <set>using namespace std;int main() {set<int> st;  // 声明一个 int 类型的 setst.insert(3);  // 插入元素st.insert(1);st.insert(4);st.insert(2);cout << "set size: " << st.size() << endl;  // 输出元素个数set<int>::iterator it;  // 声明一个迭代器for (it = st.begin(); it != st.end(); ++it) {  // 通过迭代器遍历 set 容器cout << *it << " ";}cout << endl;st.erase(4);  // 删除元素if (!st.empty()) {  // 判断 set 是否为空it = st.find(2);  // 查找元素if (it != st.end()) {cout << "found!" << endl;}}st.clear();  // 清空 set 中的所有元素return 0;
}

5. map

map 是一种 STL 中的关联容器,它存储由键值对组成的有序映射。map 使用红黑树实现,因此支持高效查找和插入操作。map 主要操作包括:

  • insert(pair):将键值对插入 map 中。
  • erase(key):从 map 中删除指定键的值。
  • clear():清空 map 中所有元素。
  • find(key):查找是否存在指定键。
  • count(key):返回指定键的元素个数。
  • size():返回 map 中键值对的个数。
  • empty():判断 map 是否为空。

下面是 map 的一个例子:

#include <iostream>
#include <map>using namespace std;int main() {map<string, int> mp;  // 声明一个 string 和 int 类型的 mapmp.insert({"hello", 1});  // 插入键值对mp.insert({"world", 2});mp.insert({"good", 3});mp.insert({"bye", 4});cout << "map size: " << mp.size() << endl;  // 输出元素个数map<string, int>::iterator it;  // 声明一个迭代器for (it = mp.begin(); it != mp.end(); ++it) {  // 通过迭代器遍历 map 容器cout << it->first << ":" << it->second << " ";}cout << endl;mp.erase("good");  // 删除元素if (!mp.empty()) {  // 判断 map 是否为空it = mp.find("hello");  // 查找元素if (it != mp.end()) {cout << "found: " << it->second << endl;}}cout << "bye count: " << mp.count("bye") << endl;  // 输出指定键的元素个数mp.clear();  // 清空 map 中的所有元素return 0;
}

http://www.ppmy.cn/news/95406.html

相关文章

Android 12.0修改recovery 菜单项字体大小

1.概述 在Android 12.0进入recovery模式后,界面会g_menu_actions 菜单选项和 提示文字,而这些文字的大小不像上层一样是通过设置属性来表示大小的 而它确是通过字体png图片的大小来计算文字的宽和高的,然后可以修改字体大小 2. 修改recovery 菜单项字体大小的核心类 buil…

SpringBoot 实战 开发中 16 条最佳实践

Spring Boot是最流行的用于开发微服务的Java框架。在本文中&#xff0c;我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验和一些熟知的Spring Boot专家的文章。 在本文中&#xff0c;我将重点介绍Spring Boot特有的实践&a…

【Minecraft开服教学】使用 MCSM 面板一键搭建我的世界服务器 并使用内网穿透公网远程联机

文章目录 前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口 5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 转载自远程穿透文章&…

Git 命令

git命令 1.git init初始化本地仓库 2.git add . 添加到暂存区 3.git commit 添加到本地仓库 4.git status 查看git此时提交状态 5.git commit -m 提交信息 加上注释&#xff0c;提交代码。 6. git push 提交到远程仓库。 7.git log 查看提交的版本 8. git reset …

GoWeb -- gin框架的入门和使用(2)

前言 书接上回&#xff0c;在gin的框架使用中&#xff0c;还有着许多方法以及它们的作用&#xff0c;本篇博客将会接着上次的内容继续记录本人在学习gin框架时的思路和笔记。 如果还没有看过上篇博客的可以点此跳转。 map参数 请求url&#xff1a; http://localhost:8080/us…

mysql 主从同步

① 修改 master 配置文件② 新建同步账号③ 创建数据库④ 修改 slave 配置文件⑤ 配置主从关系⑥ 检验主从结果 角色ipmaster192.168.233.100slave1192.168.233.101slave2192.168.233.102 禁用 selinux 跟 firewal l情况下&#xff1a; ① 修改 master 配置文件 vim /etc/my…

隐藏在背后的真相——数据存储的方式(上)

数据存储的方式 1. 数据类型详细介绍1.1类型的基本归 2. 整形在内存中的存储2.1原码&#xff0c;反码&#xff0c;补码2.2有符号&#xff08;unsigned&#xff09;和无符号&#xff08;signed&#xff09;2.3 例题 3. 大小端字节序介绍及判断 所属专栏&#xff1a;C语言❤️ &a…

算法基础学习笔记——⑪拓扑排序\最短路

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨拓扑排序 &#x1f353;朴素dijkstra算法&#xff1a; &#x1f353;堆优化版dijkstra : &#x1f353;Bellman-Ford算法 &#x1f353;spfa 算法&#xff08;队列优化的Bellman-Ford算法&#xff09; …