C++ STL 容器类和迭代器

news2024/11/26 2:26:40

一、STL容器类

1.1 STL介绍

  1. 容器就是盛放东西的东西,这里被盛放的一般是数据对象,用来盛放的是容器类
  2. 容器类的内核就是:数据结构 + 算法
  3. STL(Standard Template Library,标准模板库)
  4. STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator)

1.2 STL六大组建

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

二、迭代器

2.1 迭代器介绍

  1. 迭代器就是能通过移动来遍历处理的一种机制。
  2. 每个容器都有自己专属的迭代器。
  3. 迭代器就是C++为我们设计的一个高层次的“指针”,高层指针是面向容器中的元素的

2.2 迭代器的细节

  1. begin和end返回可读可写的迭代器,而cbegin和cend返回const的只读迭代器
  2. begin返回第0个元素的迭代器(类似于C数组的首元素首地址指针)
  3. end指向的不是末尾元素的迭代器,而是末尾元素的(实际不存在的)下一个元素的迭代器
  4. 前闭后开区间,经常记做[begin end),这样设计是为了写循环遍历时方便

2.3 正向和逆向迭代器

  1. rbegin和rend返回逆向迭代器
  2. 逆向迭代器的begin是最末尾元素,而end是第0个元素去(实际不存在的)前面1个元素的迭代器
  3. 逆向迭代器++是向前移动,而–是向后移动

2.4 迭代器的越界

  1. 和数组越界类似,编译时不审查,运行时会崩溃
  2. 不管是正向还是逆向迭代器,++不到end,–不到begin,就不会越界

三、容器库实例 array

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

int main(void)
{
    array<int, 6> data = {1,2,3,4,5,6}; 
    //通过数组 形式的 下标进行访问容器内的数据
    cout << "data.at(2) : "<< data.at(2) << endl; 
    //通过数组 形式的 下标进行访问容器内的数据 
    cout << "data[2]    : "<< data[2] << endl;  
    //返回容器的第一个元素  
    cout << "data.front : "<< data.front() << endl;
    //返回容器的最后一个元素  
    cout << "data.back  : "<< data.back() << endl;
    //data.data() 返回容器的首地址指针 
    cout << "data.front : "<< *data.data() << endl;
    //检查容器是为空返回1  不为空返回0
    cout << "data.empty : "<< data.empty() << endl;
 	//返回指向起始地址的迭代器   起始地址是容器的第0号位置
    cout << "data.begin : "<< *data.begin()<< endl;  
    //返回指向终止地址的迭代器   终止地址是容器的最后一个位置 + 1 
    cout << "data.end   : "<< *(data.end()-1)<< endl;  
    //返回容器的长度
    cout << "data.size : " << data.size()<< endl;    
     //通过迭代器修改容器的值
    *data.begin() = 222;
    *data.end() = 333;
    // cbegin只能做右值进行数据读取   c 代表 const 只读 不可修改
    *data.cbegin(); 
    *data.cend() ;  
    //遍历迭代器打印所有元素
    for(auto c = data.begin(); c!=data.end();c++) 
    {
        cout<< "data: " << *c <<endl;
    }
	//容器的交换方法
    array<int, 3> a1 = {1,2,3};
    array<int, 3> a2 = {4,5,6};
    a1.swap(a2);
    for (auto c = a1.begin(); c != a1.end(); c++)
    {
        cout <<  *c  << endl;    //    返回容器的长度
    }
    return 0;
}

四、C++ 范例网站

所有容器的成员方法,都可在这个网站下找到实例

C++学习网站

https://zh.cppreference.com/

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

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

相关文章

在泰国旅居的第5天,我定了两个新目标

点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接&#xff0c;进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群我在12月14号写了2023年&#xff0c;重新扬帆起航&#xff01;&#xff0c;里面说了2023年开始全球旅居办公&#xff0c;而在元旦…

历史大讲堂:这是老古董 苹果第一代Macintosh详解

还记得这个苹果吗&#xff1f;这是美国苹果公司的图标。今天我们就来借着苹果最出名的第一代个人电脑唠一唠苹果的前世今生。 这一代个人电脑 已经有鼠标了&#xff08;右下角&#xff09;&#xff0c;虽然非常的古老 macOS第一代系统就运行在这个上。这里我们也来唠一唠Macin…

Spring Boot学习笔记(十二)Spring Boot整合Quartz

一、自定义配置类 不使用springBoot的自动配置类&#xff0c;而是自定义配置类。 1、导入依赖 pom文件&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifact…

Android---Toolbar

目录 Toolbar Toolbar 加上 menu Toolbar 设置 Theme 完整 Demo Toolbar Toolbar 是在 Android 5.0 开始推出的一个 Materal Design 风格的导航控件 &#xff0c;Google 非常推荐大家使用 Toobar 来作为 Android 客户端的导航栏&#xff0c;以此来取代之前的 Actionbar。与 …

联想昭阳E4电脑U盘安装Win10系统操作教学

联想昭阳E4电脑U盘安装Win10系统操作教学分享。有用户想要将自己的联想昭阳E4电脑重装到Win10系统来使用。那么今天教大家一个U盘重装系统的方法&#xff0c;使用这个方法能够在系统出现问题的时候进行系统的重置&#xff0c;解决系统问题。一起来看看具体的重装教学吧。 准备工…

Exynos_4412——PWM实验

目录 一、PWM简介 1.1蜂鸣器工作原理 有源蜂鸣器 无源蜂鸣器 1.2使用GPIO控制 1.3PWM控制 1.4PWM参数 周期​ 占空比 二、Exynos_4412下的PWM控制器 三、PWM寄存器详解 四、PWM编程 一、PWM简介 1.1蜂鸣器工作原理 有源蜂鸣器 有源蜂鸣器只要接上额定电源就可以发…

主流的4种跨隔离网文件摆渡方式对比介绍

网络上承载了太多企业的业务&#xff0c;其安全性一定要得到保障&#xff0c;所以很多企业和机构都会选择将网络进行隔离划分&#xff0c;比如内外网隔离&#xff0c;办公网、研发网隔离等&#xff0c;也有不少企业会选择用云桌面的形式。 然而网络的建设就是为了互通的&#x…

【学vue跟玩一样】快速搞懂vue渲染

Vue的渲染分为条件渲染和列表渲染&#xff0c;那究竟什么式渲染呢?1.条件渲染1.v-if写法:(1)v-if"表达式"(2)v-else-if"表达式"(3)v-else"表达式"&#xff08;和我们曾经学过的JavaScript里面的if语句几乎一样&#xff09;适用于:切换频率较低的…

React umi中使用sass

umi默认支持less和css&#xff0c;如果想要使用sass&#xff0c;需要安装插件以及配置 一、安装umi的sass插件 yarn add umijs/plugin-sass 二、安装sass依赖 yarn add sass-loader node-sass 三、配置sass 在config/config.js或者 .umirc.ts文件中配置如下&#xff1a; sa…

linux 卸载elasticsearch及安装elasticsearch8.5(rpm)

目录 卸载elasticsearch rpm安装elasticsearch8.5 卸载elasticsearch # 检查elasticsearch服务状态 systemctl status elasticsearch.service; # 停止elasticsearch服务状态 systemctl stop elasticsearch.service; # 剔除elasticsearch服务 systemctl disable elasticsea…

宏任务和微任务JS执行顺序题目+总结

宏任务和微任务 resolve&#xff08;传的参数&#xff09;标记成功&#xff0c;会调用promise.then 练习网站&#xff1a; 关于promise深入理解太长没来及看 博客文章&#xff1a; promise本身是同步的&#xff0c;then/catch的回调函数是异步的 直接做题加深理解 点常见面…

漱玉转债,合力转债上市价格预测

漱玉转债基本信息转债名称&#xff1a;漱玉转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;8.0亿元。正股名称&#xff1a;漱玉平民&#xff0c;今日收盘价&#xff1a;18.1&#xff0c;转股价格&#xff1a;21.27。当前转股价值 转债面值 / 转股价格 *…

2.机器学习问题

2.机器学习问题 监督学习 监督学习&#xff08;supervised learning&#xff09;擅长在“给定输入特征”的情况下预测标签。 每个“特征-标签”对都称为一个_样本_&#xff08;example&#xff09;。 有时&#xff0c;即使标签是未知的&#xff0c;样本也可以指代输入特征。 …

手写RPC框架04-过滤器模块实现

源代码地址&#xff1a;https://github.com/lhj502819/IRpc/tree/v5 系列文章&#xff1a; 注册中心模块实现路由模块实现序列化模块实现过滤器模块实现自定义SPI机制增加框架的扩展性的设计与实现 为什么需要过滤器&#xff1f; 目前整个RPC框架的功能基本已经齐全了&…

ArcGIS基础实验操作100例--实验54 Shapfile与Graphic转换

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验54 Shapfile与Graphic转换 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff…

2022天翼数字科技生态大会 五大亮点看永不落幕的“5G物联生态城”

2022天翼数字科技生态大会&#xff0c;近日于线上隆重开幕。大会首次“云”上绽放&#xff0c;将给我们带来一场怎样的科技盛宴&#xff1f; 本次大会&#xff0c;中国电信天翼物联以“智启物联未来”为主题&#xff0c;运用“元宇宙”VR技术&#xff0c;打造虚拟世界中的“5G物…

Netty 创建高性能聊天室 单聊 群聊 websocket

目录 一、简单实现Netty发送消息的案例 二、websocket连接注册用户 三、实现单聊 四、群聊功能 五、案例代码 一、简单实现Netty发送消息的案例 案例一的依赖有&#xff1a;若没springboot项目有自动对应版本&#xff0c;其他版本可以使用maven仓库的最新版本。 <depe…

img的应用

我的目的是&#xff0c;因为图片足够的大&#xff0c;我想让它在一个小盒子里居中显示&#xff0c;所以我这样做了&#xff1a;<style>.text{width: 375px;height: 100px;} </style> <body><div class"text"><img src"./img/5.png&q…

企业为什么要利用数据中台进行数字化转型?_光点科技

近两年“数字化”已经悄悄的替代了“信息化”。那么什么是“企业的数字化转型”&#xff1f;数字化转型是企业战略层面的概念&#xff0c;它并不是追求眼前效益的机灵战术&#xff0c;其本质&#xff0c;是用数字化技术对业务的重构、流程的重构和组织的重构&#xff0c;目的是…

云呐|什么是固定资产?什么是流动资产

什么是固定资产&#xff1f;什么是流动资产&#xff0c;  1、固定资产  属于产品生产过程中用来改变或者影响劳动对象的劳动资料&#xff0c;是固定资本的实物形态固定资产在生产过程中可以长期发挥作用&#xff0c;长期保持原有的实物形态&#xff0c;但其价值则随着企业生…