C++进阶——STL

devtools/2024/9/25 1:44:04/

STL基本概念:

STL——Standard Template Library    (标准模板库)

提升开发效率并保证代码质量,通过泛型编程,使得这些数据结构和算法适用于多种数据类型

STL的六大组件:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器


容器:

这是用于存储数据的数据结构。

算法:

STL提供了一系列通用算法。

迭代器:

提供了访问容器中元素的方式,它是容器和算法之间的桥梁。

仿函数:

是一种重载了函数调用操作符operator()的类或对象,使得它们可以像函数一样被调用。

可以用来定制算法的行为,比如比较函数、平方函数等,是实现策略模式的一种方式。

适配器:

用于调整现有类接口以满足新需求,分为三类:

容器适配器,它们基于现有的容器提供特定接口。

迭代器适配器,改变迭代器的行为(如反向迭代器)。

函数适配器,调整或增强函数对象的行为。

空间配置器:

负责管理内存的分配与释放。

为容器提供了一种机制来获取和管理内存,使得STL能够独立于底层的内存管理机制,并允许用户自定义内存管理策略,以提高效率或满足特殊需求。


STL最核心的就是容器、算法、迭代器


容器:

常用的数据结构:数组、链表、树、栈、队列、集合、映射表等

这些容器分为序列式容器和关联式容器

​序列(顺序)式容器:

强调值的排序,序列式容器中的每个元素均有固定的位置

vector: 动态数组,可以在尾部高效地添加或删除元素,支持随机访问。

list: 双向链表,允许在列表的任何位置高效地插入和删除元素,但随机访问较慢。

deque: 双端队列,可以在两端高效地插入和删除,同样支持随机访问,但中间插入删除较慢。

array: 固定大小的数组,是C风格数组的类型安全版本,长度在编译时确定。

forward_list: 单向链表,只支持向前遍历,用于不需要反向遍历的场景,更节省空间。
 

​关联式容器:

二叉树结构体,各元素之间没有严格上的物理上的顺序关系

set: 无重复元素的集合,按照特定的排序规则自动排序元素。
multiset: 类似set,但允许有重复元素。
map: 键值对集合,键唯一,自动排序。
multimap: 类似map,但允许有重复的键。
unordered_set: 类似set,但使用哈希表实现,不保证顺序,查找速度快。
unordered_multiset, unordered_map, unordered_multimap: 分别对应于multiset、map、multimap的哈希版本。

算法:

迭代器:

定义迭代器变量

#include<iostream>
#include<vector>int main()
{std::vector <int> v{ 1,2,2 };std::vector<int>::iterator it ;//auto it = v.begin();std::cout << *it << std::endl;return 0;
}//输出结果是
1


http://www.ppmy.cn/devtools/28911.html

相关文章

【python】python新闻数据抓取情感分析可视化(源码+数据)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

k8s-实战——kubeadm安装1.30.0

文章目录 1介绍1.1软件架构1.2版本介绍1.3组件列表2操作步骤2.1环境准备2.2获取脚本2.3节点初始化2.4组件下载2.4.1脚本执行2.4.2目录组件2.5脚本修改2.5.1修改host文件2.5.2验证ansible配置2.6安装k8s集群2.6.1查看证书有效期

Spring Web MVC入门(3)——响应

目录 一、返回静态页面 RestController 和 Controller之间的关联和区别 二、返回数据ResponseBody ResponseBody作用在类和方法的情况 三、返回HTML代码片段 响应中的Content-Type常见的取值&#xff1a; 四、返回JSON 五、设置状态码 六、设置Header 1、设置Content…

LeetCode 11—— 盛最多水的容器

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 暴力法&#xff0c;遍历所有可能的垂线对 ( i , j ) (i, j) (i,j)&#xff0c;求取最大面积&#xff1a; a r e a m i n ( h [ i ] , h [ j ] ) ∗ ( j − i ) area min(h[i]…

Django URL路由配置之反向解析

Django URL路由配置之反向解析 在Django项目实际开发中&#xff0c;经常需要获取某个具体对象的URL&#xff0c;为生成的内容配置URL链接。 例如下面这样一个很常见的场景&#xff0c;在页面中展示一个文章标题列表&#xff0c;且每个标题都被设计成一个超链接&#xff0c;单…

Java 长字符串拼接性能优化

文章目录 引言I values 值拼接II RestController 返回参数不需要手动转JSON字符串III 多语句执行(allowMultiQueries=true)3.1 需求:通过XML手动拼接SQL实现多值插入3.2 案例引言 批量新增数据( values 值拼接 )RestController 返回参数不需要手动转JSON字符串。I values …

【大模型学习】Transformer(学习笔记)

Transformer介绍 word2vec Word2Vec是一种用于将词语映射到连续向量空间的技术&#xff0c;它是由Google的Tomas Mikolov等人开发的。Word2Vec模型通过学习大量文本数据中的词语上下文信息&#xff0c;将每个词语表示为高维空间中的向量。在这个向量空间中&#xff0c;具有相似…

开源库交叉编译(七)--- FAAD2

官网&#xff1a;https://www.linuxfromscratch.org/blfs/view/svn/multimedia/faad2.html 源码&#xff1a;faad2-2.10.1.tar.gz Step 1&#xff1a;解压 tar -xvzf faad2-2.10.1.tar.gzcd faad2-2.10.1/ Step 2&#xff1a;创建安装目录 mkdir arm_faad2 Step 3&#…