【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.rhkb.cn/news/286771.html

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

相关文章

TransUNet论文笔记

论文&#xff1a;TransUNet&#xff1a;Transformers Make Strong Encoders for Medical Image Segmentation 目录 Abstract Introduction Related Works 各种研究试图将自注意机制集成到CNN中。 Transformer Method Transformer as Encoder 图像序列化 Patch Embed…

Java基础--128陷阱

问题引入 Integer a 123; Integer b 123; System.out.println(ab); 结果为true。 但是如果代码如下 Integer a 1230;Integer b 1230;System.out.println(ab); 这个的结果就是false。 问题解决 当Integer a 123时&#xff0c;其实他底层自动转换成了Integer a Inte…

ElasticSearch之数据建模

写在前面 本文看下es数据建模相关的内容。 1&#xff1a;什么是数据建模 数据建模是对真实数据的一种抽象&#xff0c;最终映射为计算机形式的表现。其包括如下三个阶段&#xff1a; 1&#xff1a;概念模型 2&#xff1a;逻辑模型 3&#xff1a;数据模型2&#xff1a;es数据…

Chrome浏览器修改网页内容

方法一&#xff1a;使用开发者工具 在Chrome浏览器中打开要修改的网页。按下F12键打开开发者工具。在开发者工具窗口中&#xff0c;找到“Elements”标签页。在“Elements”标签页中&#xff0c;找到要修改的网页元素。双击要修改的网页元素&#xff0c;即可进行编辑。 方法二…

CCDP.02.OS正确部署后的Dashboard摘图说明

前言 在部署成功OpenStack后&#xff0c;应该可以在浏览器打开Dashboard&#xff0c;并对计算资源&#xff08;这里主要是指VM&#xff09;进行管理&#xff0c;也可以在Dashboard上面查看OpenStack是否存在错误&#xff0c;下面&#xff0c;已针对检查的关键点&#xff0c;用红…

什么是Web应用防火墙,为什么这么重要

在一个每天都会出现新的网络攻击并出现的世界中&#xff0c;我们必须不断寻找和建立新的安全控制和保护机制。目前发现的最常见的网络安全威胁通常涉及数据泄露并且发生在应用程序级别&#xff0c;这就是许多系统无法抵御此类攻击的原因。因此&#xff0c;WEB 应用防火墙变的极…

牛客NC108 最大正方形【中等 动态规划 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e 思路 动态规划: 先初始化第一行和第一列。然后其他单元格依赖自己的上边&#xff0c;左边和左上角参考答案Java import java.util.*;public class Solution {/*** 代码中的类…

电动汽车NVH来源浅析

NVH性能作为汽车最重要的性能指标之一&#xff0c;直接决定着用户感知质量&#xff0c;提高产品的舒适性可以保证优良的市场竞争性。 电动汽车相对于传统燃油汽车会更加静谧&#xff0c;内燃机的工作原理是通过燃油在汽缸中燃烧产生的爆炸推动活塞运动&#xff0c;进而驱动汽车…

线上问题排查实例分析|Redis使用不同编码引发的问题

前言 某个周末的晚上突然收到一波耗时上升报警&#xff0c;仔细一看报警消息&#xff0c;原来是出现了慢查请求导致集群耗时大幅上升&#xff0c;此时业务同学也收到上游服务受影响报警。在处理问题过程中&#xff0c;运维同学发现 Redis 集群中只有部分实例出现 cpu 利用率上…

考研数学|《1800》《1000》《880》《660》怎么选?怎么刷?看这一篇就够了!

25考研选资料&#xff0c;主打一个听人劝&#xff0c;吃饱饭 有很多讲义&#xff0c;比如张宇30讲&#xff0c;汤家凤高等数学讲义&#xff0c;李永乐复习全书&#xff0c;武忠祥高等数学基础篇等等。 然后习题也有很多&#xff0c;比如1000题&#xff0c;1800题&#xff0c;…

ICCV 2023 Oral | 人类语言演化中学习最优图像颜色编码

人类的语言是一种对复杂世界的高度简洁的编码&#xff0c;特别是语言中颜色的概念&#xff0c;成功地将原本极大的色彩空间&#xff08;如256三次方真色彩空间&#xff09;压缩至5到10种颜色。受此启发&#xff0c;来自上海交大&#xff0c;日本理化学研究所&#xff0c;东京大…

vue2 中使用音频

vue2 中使用音频 在 template 页面 写入 audio 标签 <template><div><audio ref"moreAudio" :src"moreAudioSrc"></audio><audio ref"noAudio" :src"noAudioSrc"></audio></div> </t…

百能云板开启高品质铝基PCB线路板定制服务

铝基板是一种具有良好散热功能的金属基覆铜板&#xff0c;一般单面板由三层结构所组成&#xff0c;分别是电路层&#xff08;铜箔&#xff09;、绝缘层和金属基层。用于高端使用的也有设计为双面板&#xff0c;结构为电路层、绝缘层、铝基、绝缘层、电路层。极少数应用为多层板…

iOS开发进阶(九):OC混合开发嵌套H5应用并互相通信

文章目录 一、前言二、嵌套H5应用并实现双方通信2.1 WKWebView 与JS 原生交互2.1.1 H5页面嵌套2.1.2 常用代理方法2.1.3 OC调用JS方法2.1.4 JS调用OC方法 2.2 JSCore 实现原生与H5交互2.2.1 OC调用H5方法并传参2.2.2 H5给OC传参 2.3 UIWebView的基本用法2.3.1 H5页面嵌套2.3.2 …

Linux 理解文件系统、磁盘结构、软硬链接

目录 一、理解磁盘结构 1、磁盘的物理结构 2、硬件层面理解 3、磁盘的具体物理存储结构 4、进行逻辑抽象 5、磁盘文件的管理 6、创建新文件的过程 二、理解文件系统 1、文件的构成 2、为何选择4KB而非512字节作为基本单位? 3、文件系统的组成 数据块&#xff08;Data Blocks&a…

flask_restful规范返回值

使用方法 导入 flask_restful.marshal_with 装饰器 定义一个字典变量来指定需要返回的标准化字段&#xff0c;以及该字段的数据类型 在请求方法中&#xff0c;返回自定义对象的时候&#xff0c; flask_restful 会自动的读 取对象模型上的所有属性。 组装成一个符合标准化参…

WordPress网站已经安装了SSL证书,但浏览器仍然提示不安全

WordPress网站已经安装了SSL证书&#xff0c;但浏览器仍然提示不安全 昨天我们新建了一个WordPress的网站&#xff0c;在已经安装了SSL证书的情况下&#xff0c;访问网站仍然会提示不安全。 我们使用的是Hostease提供的虚拟主机产品&#xff0c;之前从未出过这样的情况&#x…

rust中字符串String常用方法和注意事项

Rust 中通常说的字符串指的是&#xff1a;String 和 &str(字符串字面值、或者叫字符串切片)这两种类型。str是rust中基础字符串类型&#xff0c;String是标准库里面的类型。Rust 中的字符串本质上是&#xff1a;Byte的集合&#xff08;Vec<u8>&#xff09; 基础类型…

javaWeb在线考试系统

一、简介 在线考试系统是现代教育中一项重要的辅助教学工具&#xff0c;它为学生提供了便捷的考试方式&#xff0c;同时也为教师提供了高效的考试管理方式。我设计了一个基于JavaWeb的在线考试系统&#xff0c;该系统包括三个角色&#xff1a;管理员、老师和学生。管理员拥有菜…

特别澄清:关于ChatGPT辅助论文写作的重要说明

“高扬&#xff0c;快&#xff0c;教我用ChatGPT写论文&#xff0c;明天要交稿&#xff01;” “高师傅&#xff0c;ChatGPT如何能生成调查数据&#xff0c;我想直接拿来用。” “高老师&#xff0c;ChatGPT能不能一下子把论文生成出来&#xff0c;不用修改&#xff0c;直接就能…