《21天学通C++》(第十五章)标准模板库简介

本章简单介绍STL容器、迭代器和算法的基本概念,之后几章会分别详述

1.STL容器

STL容器是STL中用于存储集合数据的组件,它们可以被看作是模板类,允许开发者定义特定类型的容器发,这里按照C++11标准分为四类:顺序容器、关联容器、无序容器、容器适配器

使用STL的好处有:

  • 泛型编程: 容器和算法的模板化使得它们可以用于多种数据类型
  • 代码重用: STL提供了通用的数据结构和算法,减少代码重复
  • 性能: STL容器的实现通常为高效的数据结构,如动态数组、平衡二叉树搜索等

2.顺序容器

按顺序存储数据,具有插入速度快、查找相对慢的特点

  • vector: 动态数组,可以高效地在任意位置插入和删除元素,在尾部插入速度最快,支持随机访问。
  • deque: 双端队列,可以高效地在两端插入和删除元素。
  • list: 双向链表,可以高效地在任意位置插入和删除元素。
  • forward_list: 单向链表,只能沿着一个方向遍历

3.关联容器

按指定顺序存储键值对,通过键来访问元素,具有查询速度快、插入相对慢的特点

  • set: 存储唯一的值,插入时元素自动排序。
  • map: 由键值对组成的集合,插入时元素根据唯一键自动排序。
  • multiset: 允许多个相同值的项,插入时元素自动排序
  • multimap: 不要求键唯一,插入时会自动排序

4.无序容器

C++11引入的新容器,不保证元素顺序,大多数情况下性能更高

  • unordered_set: 与set类似,但无序,容器复杂度为常数
  • unordered_map: 与map类似,但无序
  • unordered_multiset: 与multiset类似,但无序
  • unordered_multimap: 与multimap类似,但无序

5.容器适配器

时顺序容器和关联容器的变种,提供了特定的接口来操作底层的容器,用以满足特定需求

  • stack: 后进先出(LIFO)的栈。
  • queue: 先进先出(FIFO)的队列。
  • priority_queue: 优先队列,元素根据优先级排序。

6.STL迭代器

提供了一种统一的方式来访问和操作各种容器中的元素,迭代器可以被视为一种泛型的指针,允许你间接地引用容器中的每个元素,从而遍历容器。

  • 输入迭代器(Input Iterators): 可以读取序列中的每个元素一次。
  • 输出迭代器(Output Iterators): 可以写入序列中的每个元素一次。
  • 前向迭代器(Forward Iterators): 提供单向遍历能力,只读或读写,可以读取每个元素,且可以多次读取,通常用于单向链表。
  • 双向迭代器(Bidirectional Iterators): 除了前向遍历,还可以反向遍历,通常用于双向链表。
  • 随机访问迭代器(Random AccessIterators): 提供完全的随机访问能力,可以快速访问任何元素,支持复杂的操作如随机访问、元素交换等,通常用于数组。

7.STL算法

非修改算法:
①find:在容器中查找特定元素的第一个匹配项。
②find_if:查找第一个满足特定条件的元素。
③count:计算容器中满足特定条件的元素数量。
④distance:计算两个迭代器之间的距离。

修改算法:
①fill:用特定值填充容器的某个范围。
②copy:将一个范围的元素复制到另一个容器。
③remove:从容器中移除特定值
④remove_if:移除容器中满足某个特定条件的元素
⑤reverse:反转容器中的元素顺序。

排序算法:
①sort:对容器中的元素进行排序。
②stable_sort:对容器中的元素进行稳定的排序。

集合算法:
①set_union:计算两个集合的并集。
②set_intersection:计算两个集合的交集。
③set_difference:计算两个集合的差集。
④set_symmetric_difference:计算两个集合的对称差集。

数值算法:
①accumulate:计算容器中元素的总和或满足特定操作的结果。
②inner_product:计算两个容器元素的内积。
③partial_sum:计算容器元素的部分和。

配对算法:
①mismatch:查找两个容器中第一个不匹配的元素。
②equal:比较两个容器或范围中的元素是否相等。

搜索算法:
①search:在一个大容器中搜索一个小容器的元素序列。
②search_n:搜索一个容器中包含特定数量的某个值的子序列。

变换算法:
transform:将某种操作应用到每个元素上。

流算法:
for_each:对容器中的每个元素执行特定的操作。

适配器:
std::sort 通常与 std::less 或其他比较函数对象一起使用,作为算法的适配器。

8.使用迭代器在容器和算法之间交互

迭代器是连接容器和算法的桥梁,它们允许算法在不知道底层容器类型的情况下操作容器中的元素

例子

#include <iostream>
#include <vector>
#include <algorithm> 
// 定义一个简单的函数,用于打印一个整数
void print_number(int number) {std::cout << number << " ";
}int main() {// 创建一个整数类型的 vector 容器std::vector<int> numbers = {10, 20, 30, 40, 50};// 使用 std::for_each 算法,对一个序列中的每个元素执行某种操作//numbers.begin()返回一个迭代器,指向 numbers 容器中第一个元素的位置//numbers.end()返回一个迭代器,指向 numbers 容器中最后一个元素之后的位置//即对numbers序列中的每一个元素执行print_numberstd::for_each(numbers.begin(), numbers.end(), print_number);// 输出std::cout << std::endl;system("pause");return 0;
}

9.选择正确的容器

在这里插入图片描述

10.STL字符串类

可以用于创建不同的字符串类型

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

信息系统项目管理师0082:项目基础(6项目管理概论—6.2项目基本要素—6.2.1项目基础)

点击查看专栏目录 文章目录 6.2项目基本要素6.2.1项目基础1.独特的产品、服务或成果2.临时性工作3.项目驱动变更4.项目创造业务价值5.项目启动背景记忆要点总结6.2项目基本要素 6.2.1项目基础 项目是为创造独特的产品、服务或成果

XYCTF2024 RE ez unity 复现

dll依然有加壳 但是这次global-metadata.dat也加密了&#xff0c;原工具没办法用了&#xff0c;不过依然是可以修复的 a. 法一&#xff1a;frida-il2cpp-bridge 可以用frida-il2cpp-bridge GitHub - vfsfitvnm/frida-il2cpp-bridge: A Frida module to dump, trace or hijac…

STM32入门_江协科技_3~4_OB记录的自学笔记_软件安装新建工程

3. 软件安装 3.1. 安装Keil5 MDK 作者的资料下载的连接如下&#xff1a;https://jiangxiekeji.com/download.html#32 3.2. 安装器件支持包 因为新的芯片层出不穷&#xff0c;所以需要安装Keil5提供的器件升级版对软件进行升级&#xff0c;从而支持新的芯片&#xff1b;如果不…

JSP语法——[JSP]7

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

SVM单类异常值检测

SVM是一种广泛使用的分类器&#xff0c;通常用于二分类或多分类问题。然而&#xff0c;在异常点检测的场景中&#xff0c;我们通常会将数据视为一个类别&#xff08;即正常数据点&#xff09;&#xff0c;并尝试找到那些与正常数据点显著不同的点&#xff08;即异常点&#xff…

基础IO认识

回顾文件 我们之前认识文件只是在语言程度上理解&#xff0c;但是我们理解的不够彻底&#xff0c;要想真正理解文件要在os上理解。 简单代码认识 1 #include<stdio.h>2 int main(){3 FILE* fpfopen("log.txt","w");4 if(fpNULL){5 p…

PG实例连接访问控制

实例访问控制可以控制来自于不同主机&#xff0c;不同用户是否允许访问指定的数据库&#xff0c;以及验证方式。 与oracle中的连接管理器的功能相同&#xff0c;之前有写过一篇oracleCMAN连接管理器的配置实操&#xff1a; 配置oracle连接管理器&#xff08;cman&#xff09;…

CAN标准帧和扩展帧

1、CAN总线有两个ISO国际标准&#xff1a; ISO11519和ISO11898。 1)、ISO11519定义低速CAN通信标准&#xff1a;通信速率为10&#xff5e;125Kbps&#xff0c;属于开环总线&#xff1b; 传输速率为40Kbps时&#xff0c;总线长度可达1000米&#xff1b; 低速CAN是一个“开环网络…

Linux 麒麟系统安装

国产麒麟系统官网地址&#xff1a; https://www.openkylin.top/downloads/ 下载该镜像后&#xff0c;使用VMware部署一个虚拟机&#xff1a; 完成虚拟机创建。点击&#xff1a;“开启此虚拟机” 选择“试用试用开放麒麟而不安装&#xff08;T&#xff09;”&#xff0c;进入op…

同步互斥问题模型

目录 一. 生产者-消费者问题二. 多生产者-多消费者问题三. 吸烟者问题四. 读者-写者问题五. 哲学家进餐问题 \quad 一. 生产者-消费者问题 \quad 问题分析 \quad 如何实现 \quad \quad V操作不会导致进程阻塞&#xff0c;因此两个v操作顺序可以交换。 \quad 二. 多生产者-多消费…

[答疑]Eric Evans这样画是真不懂还是有特别考虑

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 albert 2024-5-2 10:14 您觉得Evans这样画是真不懂还是有特别的考虑&#xff1f; &#xff08;补注&#xff1a;指的是“《领域驱动设计》里的这个不变式是不是也是错的”中提到的图…

重看Spring聚焦BeanDefinition分析和构造

目录 一、对BeanDefinition的理解 &#xff08;一&#xff09;理解元信息 &#xff08;二&#xff09;BeanDefinition理解分析 二、BeanDefinition的结构设计分析 &#xff08;一&#xff09;整体结构体会 &#xff08;二&#xff09;重要接口和类分析 三、构造 BeanDef…

16、ESP32 Web

Web 服务器具有移动响应能力&#xff0c;可以使用本地网络上的任何设备作为浏览器进行访问。 示例功能&#xff1a; 构建 Web 服务器控制连接到 ESP32 的 LED在本地网络的浏览器上输入 ESP32 IP 地址访问 Web 服务器通过单击 Web 服务器上的按钮&#xff0c;更改 LED 状态 //…

triton之normalization教程

一 前向 在上式中,x是代表一个tensor import torchimport triton import triton.language as tltry:# This is https://github.com/NVIDIA/apex, NOT the apex on PyPi, so it# should not be added to extras_require in setup.py.import apexHAS_APEX = True except Module…

怎样通过Java语言实现远程控制8路控制器/断路器

怎样通过Java语言实现远程控制8路控制器/断路器呢&#xff1f; 本文描述了使用Java语言调用HTTP接口&#xff0c;实现控制8路控制器/断路器&#xff0c;支持8路输出&#xff0c;均可独立控制&#xff0c;可接入各种电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0…

zabbix监控Tongweb7企业版(by lqw+sy)

此贴参考zabbix通过jmx监控Tongweb7企业版&#xff08;by lqw&#xff09;&#xff0c;是在此帖子的基础和同事整理的文档基础上重新部署验证的优化版&#xff0c;使用的是centos7。 优点&#xff1a; 1.不需要通过jmx配置进行监控。&#xff08;jmx配置需要修改tongweb的配置…

前端基础学习html(1)

1.标题标签.h1,h2...h6 2.段落标签p 换行标签br 3.加粗strong(b) /倾斜em(i) /删除 del(s) /下划线ins(u) 4.盒子&#xff1a;div //一行一个 span//一行多个 5.img :src alt title width height border 图片src引用&#xff1a;相对路径 上级/同级/中级 绝对路径&#xff…

【CTF-Crypto】修复RSA证书入门汇总

证书修复 文章目录 证书修复基础知识Truncated 1Truncated 2Jumbled 基础知识 为什么要引入证书&#xff1f; 在正常题目中&#xff0c;大部分直接给出了数字&#xff0c;但是数字在现实世界中传输不稳定&#xff0c;容易在某处出现错误&#xff0c;所以我们将所有的数字信息…

移动机器人系统与技术:自动驾驶、移动机器人、旋翼无人机

这本书全面介绍了机器人车辆的技术。它介绍了道路上自动驾驶汽车所需的概念。此外&#xff0c;读者可以在六足机器人的构造、编程和控制方面获得宝贵的知识。 这本书还介绍了几种不同类型旋翼无人机的控制器和空气动力学。它包括各种旋翼推进飞行器在不同空气动力学环境下的模…

【c++leetcode】35. Search Insert Position

问题入口 二分搜索 时间复杂度O(logn) class Solution { public:int searchInsert(vector<int>& nums, int target) {int start 0;int end nums.size() - 1;while (start < end){int mid (start end) / 2;if (nums[mid] target){return mid;}else if(nums…