C++——STL标准模板库——初识

一、概念

STL:标准模板库,Standard Template Library的缩写。是c++编程语言中重要部分,提供了一组通用模板,实现常用的数据结构和算法。是泛型编程思想的重要体现,进一步提升了复用性。

STL分为六大组件:容器、算法、迭代器、函数对象、适配器、空间分配器。

二、容器

置物之所也。简单理解,就是我们程序中组织存放数据的盒子。有的盒子拿到后大小就固定了,比如array数组;或者有一种盒子可以自己调整大小,比如vector(大小可变的动态数组);也可能是对数据的顺序有严格要求,或者对数据的存取顺序有严格要求等功能。这些盒子允许你组织存放、操作任何类型的数据,且可以根据具体需求和性能要求选择合适的容器。容器可以分为三种:

(一)、序列容器:

强调值的排序,序列式容器中的每个元素均有固定的位置。 包括:array(数组)、vector(向量)、deque(双端队列)、list(双向列表)、forward_list(单向链表)。

(二)、关联容器:

在关联容器中,按照预定义的顺序插入元素,例如按升序排序。  关联容器有map和set两种容器,底层均以红黑树结构实现,存储的数据有一个键值的映射,通过键值进行自动排序。也有无序版本的unordered_map和unordered_set。

(三)、容器适配器:

容器适配器是序列容器或关联容器的变体,为了简单明确起见,它对容器接口进行限制。 容器适配器不支持迭代器。包含queue(队列:首出尾进)和stack(栈:顶进顶出)。

三、算法(algorithm)

问题之解法也。有限的步骤,解决逻辑或者数学上的问题,这一学科叫做算法(algorithm),使用STL提供的算法需要先#include<algorithm>;算法分为质变算法和非质变算法。

质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等

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

特定的算法,只能有特定的容器相互配合使用,实现高效的运算。

四、迭代器(iterator)

迭代器是容器和算法之间的融合剂,)是一种用于遍历容器中元素的对象;所有容器必须通过迭代器进行数据操作,实现删插增改或排序等目的。简单理解,迭代器就是容器中的一个抓手,能够根据要求抓取容器内的数据进行多种操作。每个容器有自己的专属迭代器。

迭代器的使用与指针非常类似,初学者的我们可以先理解为指针。

五、实例

容器使用需要先包含容器头文件,例如要使用vector容器就需要先include<vector>

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>void myprint(const int& value) {cout << value << endl;
}void test() {vector<int> v;v.push_back(2);v.push_back(5);v.push_back(1);v.push_back(7);v.push_back(4);/*方法一初始化两个迭代器*///itbegin指向第一个元素vector<int>::iterator itbegin = v.begin();//itend指向最后一个元素的后面一个位置vector<int>::iterator itend = v.end();while (itbegin != itend) {cout << *itbegin << endl;itbegin++;}/*方法二*/for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << endl;}/*方法三用STL提供的遍历算法for_each,需要先包含算法头文件algorithm.参数1和参数2指定遍历区间,参数3利用回调函数的指针实现输出*/for_each(v.begin(), v.end(), myprint);
}	
int main(int argc, char const *argv[]) {test();return 0;
}

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

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

相关文章

【FGPA】Verilog:JK 触发器 | D 触发器 | T 触发器 | D 触发器的实现

0x00 JK 触发器 JK 触发器是 RS 触发器和 T 触发器的组合&#xff0c;有两个输入端 J 和 K&#xff0c;如果两个输入端都等于 1&#xff0c;则将当前值反转。 行为表 状态图 Timing Diagram Circuit JK 触发器的设计目的是防止 RS 触发器在输入 S 和 R 均等于 …

使用Java给钉钉群发消息

目录 目录 1.安装依赖 2.编写工具类 3.测试 安全设置 Webhook 代码编写 运行测试 4.艾特全部功能 1.安装依赖 <dependency><groupId>com.taobao.dingding</groupId><artifactId>taobao-sdk</artifactId><version>1.0.0</versio…

Java中枚举类的创建及其应用场景

枚举类 枚举是一种特殊的类(编译之后也是生成class文件)可以实现接口,属于引用数据类型,枚举类是一组常量(枚举对象)的集合可以将枚举对象当作常量使用 自定义枚举类 自定义一个类实现枚举的效果 构造器私有化: 因为枚举对象的个数是固定的,所以需要防止直接new对象 创建一…

Zabbix监控Oracle表空间

警告 Oracle {#TABLESPACE}: 表空间数据文件已分配超过 {$ORACLE.TBS.UTIL.PCT.MAX.HIGH}% &#xff0c;且表空间已使用超过{$ORACLE.TBS.USED.PCT.MAX.WARN}% 警告 min(/Oracle by ODBC-2/oracle.tbs_used_file_pct["{#TABLESPACE}"],5m)>{$ORACLE.TBS.USED.PC…

E云管家开发个人微信号批量修改好友备注

简要描述&#xff1a; 修改好友备注 请求URL&#xff1a; http://域名地址/modifyRemark 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说…

内部类——静态/非静态对外部类的访问

非静态内部类 可以访问外部类的非静态属性/静态属性&#xff0c;包括私有属性 静态内部类 1.只可以访问外部类的静态属性&#xff0c;包括静态私有属性 2.不可以可以访问外部类的非静态属性&#xff0c;包括私有属性

扫地机器人市场持续火爆,景联文科技数据采集标注方案助力扫地机器人智能化升级

随着消费者对智能家居和清洁卫生的需求增加&#xff0c;扫地机器人市场规模不断扩大。市场竞争也日益激烈&#xff0c;各品牌都在努力提升产品性能和服务质量&#xff0c;以获取更大的市场份额。 IDC的统计数据显示&#xff0c;今年双十一前两周&#xff08;2023年10月23日至20…

Python入门05 print函数

目录 1 Python中的内置函数2 print函数介绍3 print函数的用途总结 1 Python中的内置函数 Python中内置了很多函数&#xff0c;我们可以直接调用&#xff0c;以下是一些常见的函数&#xff1a; abs()&#xff1a;返回一个数的绝对值。all()&#xff1a;判断一个可迭代对象中的…

Jmeter和Testlink自动化测试框架研究与实施

摘 要 目前基于Jmeter的接口自动化测试框架&#xff0c;大多只实现脚本维护和自动调度&#xff0c;无法与Testlink进行互通&#xff0c;实现测试方案与自动化实施流程连接&#xff0c;本文基于Testlink、Jmeter、Jenkins实现&#xff1a;通过Testlink统一维护接口自动化测试用…

基于python的IOS自动化测试小技巧

文章目录 一、Xpath 的使用1.1 使用Xpath读取固定位置的元素的内容一、Xpath 的使用 在执行IOS APP UI自动化测试时,需要使用到元素定位,我们使用WEditor进行元素的定位,操作流程可以查看基于Python的IOS自动化测试环境搭建 ,但是在一些特殊的场景需要灵活使用元素定位。 …

大数据平台/大数据技术与原理-实验报告--部署全分布模式HBase集群和实战HBase

实验名称 部署全分布模式HBase集群和实战HBase 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.11.07-2023.11.10 实验仪器设备以及实验软硬件要求 专业实验室&#xff…

diffusion model (九) EmuEdit技术小结

文章目录 背景1 核心思想2 方法2.1 方法建模2.2 数据工程2.2.1 image-edit任务类别定义2.2.2 指令集生成2.2.3 图片对的生成 3 结果 Paper: https://emu-edit.metademolab.com/assets/emu_edit.pdf Project web: https://emu-edit.metademolab.com/ Code: have not opensourc…

vue3 setup语法糖 搜索

前言 Vue.js 是一款流行的 JavaScript 框架&#xff0c;用于构建用户界面。它提供了一种简洁的方式来创建可维护和可测试的前端应用程序。Vue.js 的核心库只关注视图层&#xff0c;易于上手&#xff0c;同时与其他库或现有项目整合也非常方便。Vue 也完全能够为复杂的单页应用…

DBT踩坑第二弹

总结下dbt-spark踩到的坑&#xff0c;连接方式采用的是thrift连接 Kerberos认证。考虑到开源组件Kyuubi也是基于Hiveserver2&#xff0c;使用的thrift协议&#xff0c;所以采用Kyuubi执行SparkSQL。 官方文档给出的Thrift方式连接示例真的是简单&#xff0c;但是真是用起来真是…

Selenium+Python做web端自动化测试框架与实例详解教程

最近受到万点暴击&#xff0c;由于公司业务出现问题&#xff0c;工作任务没那么繁重&#xff0c;有时间摸索seleniumpython自动化测试&#xff0c;结合网上查到的资料自己编写出适合web自动化测试的框架&#xff0c;由于本人也是刚刚开始学习python&#xff0c;这套自动化框架目…

基于HTML+CSS+JavaScript的登录注册界面设计

一、界面效果: 二、HTML代码: 登录注册html: 登录成功html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <h1>登录成功!</h1> </body> <…

类指针压缩空间

一、类指针压缩介绍 压缩指针&#xff0c;指的是在 64 位的机器上&#xff0c;使用 32 位的指针来访问数据&#xff08;堆中的对象或 Metaspace 中的元数据&#xff09;的一种方式。 对象头中的 Class Pointer 默认占 8 个字节&#xff0c;开启 -XX:UseCompressedOops 后&…

跳表的学习记录

跳表&#xff08;Skip List&#xff09;是一种数据结构&#xff0c;它通过在多个层次上添加额外的前向指针来提高有序数据的搜索效率。跳表与其他常见的有序数据结构&#xff08;如二叉搜索树、平衡树如AVL树和红黑树、B树等&#xff09;相比&#xff0c;具有其独特的优缺点&am…

vue3中如何使用TypeScript?

在Vue 3中引入和使用TypeScript非常简单。下面是在Vue 3中引入和使用TypeScript的步骤&#xff1a; 创建Vue 3项目&#xff1a;首先&#xff0c;使用Vue CLI创建一个新的Vue 3项目。可以使用以下命令&#xff1a; vue create my-project在创建项目时&#xff0c;选择TypeScri…

国标GB28181安防监控平台EasyCVR周界入侵AI算法检测方案

在城市管理和公共安全领域&#xff0c;安全视频监控的重要性日益凸显。AI视频智能分析平台基于深度学习和计算机视觉技术&#xff0c;利用AI入侵算法&#xff0c;能够实时、精准地监测周界入侵行为。 TSINGSEE青犀在视频监控及AI视频智能分析领域拥有深厚的技术积累和丰富的实…