当前位置: 首页 > news >正文

C++ STL学习记录(v1)

C++ STL学习记录

  • 一. 什么是STL
    • 1.1 STL的诞生
    • 1.2 STL基本概念
    • 1.3 STL的六大组件
    • 1.4 STL中的容器、算法、迭代器
    • 1.5 容器、算法、迭代器实践

一. 什么是STL


1.1 STL的诞生

  • STL建立的目的就是为了解决软件界复用性的需求。
  • C++的面向对象泛型编程思想,目的就是为了复用性的提升。
  • 大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作
  • 为了建立数据结构和算法的一套标准,诞生了STL

1.2 STL基本概念

  • STL (Standard Template Library)标准模板库
  • STL从广义上分为:容器(container) 算法(algorithm) 迭代器(iterator)
  • 容器算法之间通过迭代器无缝链接。
  • STL几乎所有代码都采用了模板类或者模板函数

1.3 STL的六大组件

STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。前四个为主要开发常用。

  1. 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。
  2. 算法:各种常用的算法、如sort、find、copy、for_each等。
  3. 迭代器:充当容器和算法之间的胶合剂;
  4. 仿函数:行为类似函数,可作为算法的某种策略;
  5. 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
  6. 空间配置器:负责空间的配置与管理

1.4 STL中的容器、算法、迭代器

容器:
STL容器就是将运用最广泛的一些数据结构实现出来。
最常用的数据结构:数组,链表,树,栈,队列,集合,映射表等。
这些容器分为序列式容器关联式容器两种:

  • 序列式容器容器:强调值的排序,序列式容器中的每个元素均具有固定的位置。
  • 关联式容器:二叉树结构,各元素之间么有严格的物理上的顺序关系。

算法:
有限的步骤,解决逻辑或数学上的问题,就是算法(Algorithm)
算法分为:质变算法非质变算法

  • 质变算法:是指运算过程中会更改区间内的元素内容,例如拷贝、替换、删除等
  • 非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等

迭代器:
提供一种方法,能依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。
每个容器都有自己的专属迭代器
迭代器使用非常类似于指针、初学阶段我们可以先将迭代器理解为指针。

迭代器种类:

  • 输入迭代器:对数据的只读访问 ++、==、!=
  • 输出迭代器:对数据的只写访问 ++
  • 前向迭代器:读写操作,并能向前推进迭代器 ++、==、!=
  • 双向迭代器:读写操作,并能向前和向后操作 ++、–
  • 随机访问迭代器:读写操作,可以以跳跃的方式访问任意数据,功能最强的迭代器 ++、–、[n]、-n、<、<=、>、>=

常用的容器中迭代器种类为双向迭代器、和随机访问迭代器。

1.5 容器、算法、迭代器实践

容器:vector | 算法:for_each | 迭代器:vector<int>::iterator

int main() {//创建一个vector容器vector<int> v;//向容器插入数据v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);//通过迭代器访问容器中的数据vector<int>::iterator iteratorBegin = v.begin();vector<int>::iterator iteratorEnd = v.end();//第一种遍历方式while (iteratorBegin != iteratorEnd) {cout << *iteratorBegin << endl;iteratorBegin++;}//第二种遍历方式for (vector<int>::iterator i = v.begin(); i < v.end(); i++) {cout << *i << endl;}//第三种,算法遍历for_each(v.begin(), v.end(), [] (int val){cout << val << endl;});return 1;
}

相关文章:

C++ STL学习记录(v1)

C STL学习记录一. 什么是STL1.1 STL的诞生1.2 STL基本概念1.3 STL的六大组件1.4 STL中的容器、算法、迭代器1.5 容器、算法、迭代器实践一. 什么是STL 1.1 STL的诞生 STL建立的目的就是为了解决软件界复用性的需求。C的面向对象和泛型编程思想&#xff0c;目的就是为了复用性的…...

开发中遇到的问题

1.当写一个导出功能时&#xff0c;因为编码写URL地址&参数的时候&#xff0c;用反转字符串的时候换行了&#xff0c;造成地址拼接不成&#xff0c;一直报错&#xff0c;后来发现是编码格式造成的&#xff0c;已解决。 解决方案&#xff1a;不换行或者用 “”拼接 2.当本地…...

Javascript笔记

数据类型 基本类型(primitive value) 简单的数据段&#xff0c;包括 Undefined, Null, Boolean, Number, String初始化只使用2原始字面量形式&#xff0c;如果使用new则会创建Object无法加入新的属性 引用类型(reference value) 可能由多个值构成的对象判断类型 typeofinstanc…...

Elasticsearch(ES)配置及优化

在Elasticsearch中&#xff0c;索引的大小和存储能力取决于多个因素&#xff0c;包括文档大小、索引的分片数、硬件规格、查询负载和其他因素。索引和分片配置&#xff1a;索引和分片的数量和配置会对查询并发性能产生影响。如果索引和分片的数量太少&#xff0c;可能会导致查询…...

一文看懂Java语言与Java生态圈

Java语言与Java生态圈 1、Oracle JDK与Open JDK之间的关系 Oracle JDK Java最早是由SUN公司发明&#xff0c;Oracle JDK之前叫SUN JDK&#xff0c;显而易见&#xff0c;这是在2009年Oracle收购SUN公司之前&#xff0c;收购之后被名为Oracle JDK&#xff0c;实际上&#xff0…...

GitHub 上有什么嵌入式方面的项目?

原文直达,喜欢就点个赞吧&#xff01; GitHub 上有什么嵌入式方面的项目&#xff1f; - CodeAllen的回答 - 知乎 https://www.zhihu.com/question/27835930/answer/2871624679 前言 对于GitHub&#xff0c;可能做互联网开发的同学会更加熟悉&#xff0c;尤其是前端&#xff0…...

【C语言进阶】结构体、位段、枚举和联合

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;C语言航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&a…...

markdown和latex常用部分参考@注脚@链接跳转@csdn

文章目录refmarkdown和latex常用部分参考typora文档基础语法扩展语法链接内联链接的方式将链接提取出来链接示例typora的支持LinksInline LinksInternal Links&#x1f388;Reference LinksURLs文章内部跳转(Heading IDs)&#x1f388;My Great Heading注脚(Footnotes)&#x1…...

Java 在二叉树中增加一行

623. 在二叉树中增加一行中等给定一个二叉树的根 root 和两个整数 val 和 depth &#xff0c;在给定的深度 depth 处添加一个值为 val 的节点行。注意&#xff0c;根节点 root 位于深度 1 。加法规则如下:给定整数 depth&#xff0c;对于深度为 depth - 1 的每个非空树节点 cur…...

kubernetes(k8s) 知识总结(第2期)

1. “控制器”思想 kube-controller-manager 是一系列控制器的集合&#xff0c;这些控制器被放在 Kubernetes 项目的 pkg/controller 目录&#xff0c;这些控制器都以独有的方式负责某种编排功能。它们都遵循一个通用的编排模式——控制循环。 以 Deployment 为例介绍它对控…...

windows-Mysql的主从数据库同步设置

复制原有的mysql修改my.ini配置文件 修改端口号修改从数据的地址和从数据库的数据存放地址安装从数据库进入从数据库的bin目录&#xff0c;打开命令窗口输入命令&#xff1a;mysqld.exe install mysql-back --defaults-file "C:\ProgramData\MySQL\MySQL Server 5.7-back\…...

Docker逃逸

文章目录原理环境搭建Docker 环境判断Docker 容器逃逸特权模式逃逸如何判断是否为特权模式逃逸docker.sock挂载逃逸逃逸Remote API未授权访问未授权访问逃逸容器服务缺陷逃逸影响版本环境搭建逃逸脏牛漏洞逃逸参考原理 docker其实就是一个linux下的进程&#xff0c;它通过Name…...

k8s项目部署

k8s命令k8s项目部署部署流程实现导出相应的yaml文件 kubectl create deployment 名字--image镜像-o yaml --dry-runclient > 文件名 例&#xff1a; kubectl create deployment nginx --imagenginx -o yaml --dry-runclient > m1.yaml导出已经部署后的yaml文件 kubectl g…...

Modbus通信协议学习笔记

Modbus主从设备 主控设备&#xff08;Modbus Master&#xff09;&#xff1a;工控机、PLC、触摸屏等等 从设备&#xff08;Modbus Slave&#xff09;&#xff1a;PLC、Modbus采集模块、带485通讯的传感器、仪器仪表等等 Modbus物理接口&#xff1a;串口&#xff08;RS232、RS4…...

ubuntu重启、关机命令

// // // //之前用linux系统&#xff0c; 一键解决也是可以的&#xff0c;反正我每次用命令&#xff08;泪目…&#xff09;&#xff0c;中间崩了好几次&#xff0c;换回win&#xff0c;此篇也做记录 // // // 重启命令 以下所有命令在root根目录下输入&#xff08;普通用户&…...

Xshell 7 连接云服务器的步骤和出现的错误

一、工具准备云服务器Xshell 7二、使用 Xshell 7 连接数据库三、新建会话属性后&#xff0c;没有自动弹出 SSH 用户名要求输入四、SSH 用户身份验证不能输入 Password五、Xshell 连接 centos 7 服务器 报错提示 “ssh服务拒绝了密码&#xff0c;请再试一次“&#xff0c;但是密…...

Python多进程同步——文件锁

多个进程共享同一份资源&#xff08;共享内存、文件等&#xff09;时&#xff0c;会涉及到资源竞争问题。为了解决这种问题&#xff0c;一般采取的措施是进程在访问资源前加锁保护&#xff0c;避免多个进程同时读写。本文介绍的Python文件锁可以用来解决多进程的同步问题。 目录…...

实现 element-plus 表格多选时按 shift 进行连选的功能

前言 element-plus表格提供了多选功能&#xff0c;可单击勾选一条数据&#xff0c;可全选。 现在有个很合理的需求&#xff0c;希望实现类似于文件系统中shift连续选择功能&#xff0c;并且在表格排序后&#xff0c;依照排序后的顺序连选。 一、el-table 多选表格基本使用 1、…...

华为OD机试真题JAVA实现【考古学家】真题+解题思路+代码(20222023)

🔥系列专栏 华为OD机试(JAVA)真题目录汇总华为OD机试(Python)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出说明示例二输入输出说明...

Spring3之基于Aspect实现AOP

简介 使用 Aspect 搭配 Spring 可轻松实现 AOP&#xff1b;本章将通过一个完整示例演示如何实现这一功能 实现步骤 修改 beans.xml 配置文件的 schema 部分&#xff1b;可以在 spring-framework-reference.html 文件通过搜索关键字 “/aop” 找到配置 schema&#xff0c;然后…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础

在构建任何动态、数据驱动的Web API时&#xff0c;一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说&#xff0c;深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言&#xff0c;以及学会如何在Python中操作数据库&#xff0c;是…...