【C++】基础:STL容器库

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍STL容器库。
学其所用,用其所学。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. STL容器库介绍
    • :blush:2. 序列容器
      • array静态连续数组
      • vector动态连续数组
      • deque双端队列
      • forward_list单向链表
      • list双向链表
    • :satisfied:3. 关联容器
      • set集合
      • map键值对集合
    • :satisfied:4. 容器适配器
      • stack栈
      • queue队列
      • priority_queue优先队列

😏1. STL容器库介绍

STL 容器库是 STL 的一个重要组成部分,提供了多种数据结构,包括序列容器、关联容器和容器适配器等,用于存储和管理数据。容器管理着为其元素分配的存储空间,并提供成员函数来直接访问或通过迭代器(具有类似于指针的属性的对象)访问它们。

😊2. 序列容器

array静态连续数组

#include <iostream>
#include <array>using namespace std;int main() {// 静态连续数组array<int, 5> a = {1, 2, 3, 4, 5};cout << a[0] << endl;cout << a.at(1) << endl; // error:at(20)// 初始化数组array<int, 10> a1;a1.fill(10);for (auto &n : a1){cout << n << endl;}// 使用迭代器遍历array<int, 10>::iterator it = a1.begin(); // auto itfor (; it != a1.end(); it++){cout << *it << endl;}// array也可创建自定义数据类型return 0;
}

vector动态连续数组

#include <iostream>
#include <vector>using namespace std;int main() {vector<int> vec(3, 100);vec.reserve(6); // 预留5个位置vec.push_back(10);cout << (uintptr_t)vec.data() << endl;vec.push_back(110); // insertcout << (uintptr_t)vec.data() << endl;vec.emplace_back(120); // emplace原位构造,复杂数据cout << (uintptr_t)vec.data() << endl;cout << vec.size() << endl;cout << vec.capacity() << endl;for (auto &n : vec){cout << n << "\t";}return 0;
}

deque双端队列

在队列两端都可以进行操作,也可以进行随机下标访问。其操作基本上与std::vector一样,比std::vector多了在头部进行插入和移除的操作。

一般来说,std::vector用在需要频繁进行随机下标访问的场景,如果需要频繁在头部和尾部进行插入和删除操作,则用std::deque。

forward_list单向链表

单向链表迭代器只能做自增,不能与数字相加减,也不能两个迭代器相减。

#include <iostream>
#include <forward_list>using namespace std;// 一个元素返回true时移除对应元素
bool pre(const int &val)
{return val > 3; // 移除大于3的元素
}int main() {forward_list<int> fls = {5, 6, 2, 3, 1};forward_list<int> fls2 = {0, 4, 17, 12, 15,18};// 升序排序/降序排序fls.sort(); // fls.reverse();fls2.sort();// 移除元素fls.remove(3);fls.remove_if(pre);// 也可以用lambda表达式fls.remove_if([](const int &val) { return val > 3; });// 合并fls2.merge(fls);for (auto &v : fls2){cout << v << "\t\t";}return 0;
}

list双向链表

😆3. 关联容器

set集合

map键值对集合

😆4. 容器适配器

stack栈

后进先出数据结构。

#include <iostream>
#include <stack>
#include <string>using namespace std;int main()
{stack<string> str_stack;// 入栈, 如果是复合数据结构,用emplace就地构造代替push入栈str_stack.push("H");str_stack.push("e");str_stack.push("l");str_stack.push("lo");// 出栈while(!str_stack.empty()){string str = str_stack.top(); // 先用top获取到栈顶元素str_stack.pop(); // 弹出栈顶元素cout << str << "--已出栈,感觉良好。栈里还有" << str_stack.size() << "个元素" << endl; }return 0;
}

queue队列

先进先出数据结构。

#include <iostream>
#include <queue>using namespace std;int main()
{queue<const char *> q;// 入队,如果是复合数据类型,用emplace就地构造代替push入队q.push("he");q.push("ll");q.push("o");// 出队while (!q.empty()){const char *name = q.front(); // 先获取队首元素q.pop(); // 将队首元素出队cout << name << "已出队,感觉良好。队里还有" << q.size() << "个元素" << endl;}return 0;
}

priority_queue优先队列

可以根据优先级的高低确定出队顺序的数据结构。如果是复合数据类型,需要提供比较函数或者重载<运算符。

#include <iostream>
#include <queue>int main() {// 创建一个最大堆优先队列,存储 int 类型的元素std::priority_queue<int> maxHeap;// 添加元素到优先队列中maxHeap.push(3);maxHeap.push(5);maxHeap.push(1);maxHeap.push(7);maxHeap.push(2);// 打印优先队列中的元素(不会按顺序打印)std::cout << "Elements in priority queue:" << std::endl;while (!maxHeap.empty()) {std::cout << maxHeap.top() << " ";maxHeap.pop(); // 弹出队首元素}std::cout << std::endl;return 0;
}

请添加图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/568638.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

官宣子品牌艾荷,坚定数字化赋能,鸿雁2024新春发布会助推40多年央企品牌焕新升级

3月25日&#xff0c;一场以“春江水暖雁先飞”为主题的2024鸿雁电器智能物联战略及新品发布会在杭州盛大召开。鸿雁电器总裁王米成、副总裁吴明、副总裁夏晓衍、市场部总经理梁彩雷、五金水暖渠道部总经理刘亮、灯饰与智能家居渠道部总经理王育炳等公司领导出席&#xff0c;以及…

【算法】子集(LIS最长上升子序列)

文章目录 题目输入描述输出描述示例分析思路最长递增子序列dp解法&#xff08;2/10&#xff09;binarySearch 贪心&#xff08;AC&#xff09; 题目 小强现在有 n n n个物品&#xff0c;每个物品有两种属性 x i x^i xi和 y i y^i yi。他想要从中挑出尽可能多的物品满足以下条…

python面向对象 | 继承、多态、封装

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

全面:vue.config.js 的完整配置

vue.config.js是Vue项目的配置文件&#xff0c;用于配置项目的构建、打包和开发环境等。 在Vue CLI 3.0之后&#xff0c;项目的配置文件从原来的build和config目录下的多个配置文件&#xff0c;合并成了一个vue.config.js文件。这个文件可以放在项目的根目录下&#xff0c;用于…

IT部门都想要的跨网文件交换解决方案,了解一下

近年来全球网络安全威胁态势的加速严峻&#xff0c;使得企业对于网络安全有了前所未有的关注高度&#xff0c;企业的网络安全体系建设正从“以合规为导向”转变到“以风险为导向”&#xff0c;从原来的“保护安全边界”转换到“保护核心数据资产”的思路上来。 为了保护企业的核…

第十三届蓝桥杯物联网试题(省赛)

做后感悟&#xff1a; OLED显示函数需要一直显示&#xff0c;所以在主函数中要一直循环&#xff0c;为了确保这个检错功能error只输出一次&#xff0c;最好用中断串口进行接收数据&#xff0c;数据收完后自动进入中断函数中&#xff0c;做一次数据检查就好了&#xff0c;该开灯…

干货分享DS5L1伺服电机通过倍讯科技485转 Profinet 网关与西门子PLC进行通信的配置方法

倍讯科技485转 ProfinetDS5L1 伺服电机与 Profinet 网关进行通信需要了解 Profinet 协议和伺服电机的具体通信要求。以下是您可以如何解决此问题的总体概述&#xff1a; 了解 Profinet&#xff1a;Profinet 是自动化工业以太网标准。您需要了解 Profinet 的工作原理、其寻址方案…

【数据结构与算法】直接插入排序和希尔排序

引言 进入了初阶数据结构的一个新的主题——排序。所谓排序&#xff0c;就是一串记录&#xff0c;按照其中的某几个或某些关键字的大小&#xff08;一定的规则&#xff09;&#xff0c;递增或递减排列起来的操作。 排序的稳定性&#xff1a;在一定的规则下&#xff0c;两个值…

文件的介绍

文件介绍 文件是计算机中用于存储数据的一种载体。一般储存在磁盘上。 文件通常以一定的格式和结构存储数据&#xff0c;可以包含文本、图像、音频、视频等各种类型的信息。 文件可以通过文件系统进行管理和组织&#xff0c;用户可以对文件进行创建、打开、编辑、保存、复制…

PC电脑技巧[笔记本通过网线访问设备CMW500]

笔记本局域网访问设备 现在我有一台CMW500,我要用笔记本去访问它,但是我发现没有路由器就是不能够访问,通过网线连接设备就是ping不通: 这里设置TCP/IPv4的IP地址如下,这时候就可以pin通了:

利用RWKV-Runner初步感受一下ai的世界

最近又听到群里的高手在讨论RWKV-Runner&#xff0c;于是没忍住&#xff0c;就想试试&#xff0c;没想到第一关就卡住了。 从群里大咖上传的RWKV-Runner_windows_x64.exe文件开始吧&#xff0c;又找了个虚拟机&#xff0c;直接放在桌面上运行一下&#xff0c;结果就跳出一堆文…

WMS仓储管理系统如何优化供应链管理

随着信息技术的快速发展和市场竞争的加剧&#xff0c;优化供应链管理已成为企业提升竞争力的关键。WMS仓储管理系统作为供应链管理的核心工具&#xff0c;其在优化供应链过程中的作用日益凸显。本文将深入探讨WMS仓储管理系统如何优化供应链管理。 首先&#xff0c;WMS仓储管理…