《C++ Primer》--学习7

news2024/11/9 1:51:28

顺序容器

容器库概览

 迭代器

与容器一样,迭代器有着公共的接口:如果一个迭代器提供某个操作,那么所有提供相同操作的迭代器对这个操作的实现方式都是相同的。

迭代器范围

一个迭代器范围是由一对迭代器表示,两个迭代器分别指向同一个容器中的元素或者尾元素之后的位置。这两个迭代器通常被称为 begin 和 end,或者 first 和 last

这种元素范围被称为左闭合区间  [begin, end)

使用左闭合范围的编程假定

容器类型成员

反向迭代器是一种反向遍历容器的迭代器,与正向迭代器相比,各种操作的含义都发生了跌倒

例如:对一个反向迭代器执行++操作,会得到上一个元素

begin 和 end 成员

带 r 的版本返回反向迭代器,以 c 开头的版本返回 const 迭代器

与 const 指针和引用类似,可以将一个普通的 iterator 转换成对应的 const_iterator,但反之则不行

当不需要写访问时,应使用 cbegin 和 cend

容器定义和初始化

每个容器类型都定义了一个默认构造函数。除 array 之外,其他容器的默认构造函数都会创建一个指定类型的空容器,且都可以接受指定容器大小和元素初始值的参数

 将一个容器初始化为另一个容器的拷贝

直接拷贝整个容器,或者(array除外)拷贝由一个迭代器对指定的元素范围

标准库 array 具有固定大小

由于大小是 array 类型的一部分,array 不支持普通的容器构造函数。这些构造函数都会确定容器的大小,隐式或显式

一个默认构造的 array 是非空的,它包含了与其大小一样多的元素。这些元素都被默认初始化,就像一个内置数组中的元素那样

 赋值和 swap

赋值运算符将其左边容器中的全部元素替换成右边容器中元素的拷贝

 第一个赋值运算后,左边容器将于右边容器相等。如果两个容器原来大小不同,赋值运算后两者的大小都与右边容器的大小相同。第二个赋值运算后,c1 的 size 变成 3 

与内置数组不同,标准库 array 类型允许赋值。赋值号左右两边的运算对象必须具有相同的类型

 由于右边运算对象的大小可能与左边运算对象的大小不同,因此 array 类型不支持 assign,也不允许用花括号包围的值列表进行赋值

 使用 assign (仅顺序容器)

赋值运算符要求左边和右边的运算对象具有相同的类型。它将右边运算对象中所有元素拷贝到左边运算对象中。顺序容器(array 除外)还定义了一个 assign 的成员,允许我们从一个不同但是相容的类型赋值,或者从容器的一个子序列赋值。assign 操作用参数指定的元素(的拷贝)替换左边容器中的所有元素。

 使用 swap

 swap 操作交换两个相同类型容器的内容。调用 swap 之后,两个容器中的元素将会交换:

 除 array 外,swap 不对任何元素进行拷贝,删除或插入操作,因此可以保证在常数时间内完成

 元素不会移动意味着,除 string 外,指向容器的迭代器,引用和指针在 swap 操作之后都不会失效。它们仍指向 swap 操作之前所指向的那些元素。但是,在 swap 之后,这些元素已经属于不同的容器了

与其他容器不同,swap 两个 array 会真正交换它们的元素,因此,交换两个 array 所需的时间与 array中元素的数目成正比

容器大小操作

关系运算符

比较两个容器实际上是进行元素的逐对比较,这些运算符的工作方式与 string 的关系运算符类似

 容器的关系运算符使用元素的关系运算符完成比较

只有当其元素类型也定义了相应的比较运算符时,我们才可以使用关系运算符来比较两个容器

顺序容器操作

向顺序容器添加元素

 不同容器使用不同的策略来分配元素空间,而这些策略会影响性能。在一个 vector 或 string 的尾部之外的任何位置,或是 deque 的首位之外的任何位置添加元素,都需要移动元素。而且,向一个 vector 或 string 添加元素可能引起整个对象存储空间的重新分配

使用 push_back

 使用 push_front

 

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

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

相关文章

剪辑必备技巧:轻松去除视频中的多余物体

在视频剪辑过程中,有时我们需要去除视频中的多余物体,以提升视觉效果和观赏体验。今天将为您介绍一些实用的技巧,帮助您轻松去除视频中的多余物体,让您的剪辑作品更加精彩。 一、选择适当的剪辑软件进行剪辑操作 一些专业的剪辑…

基于MATLAB实现KECA、PCA和KPCA的多阶段发酵过程监测方法毕业设计(完整源码+说明文档+PPT+开题报告+数据)

文章目录,完整源码在文末 1. 研究目标2. 主要研究内容3. 技术路线4. 预期成果5. 功能说明6. 参考文献7. 完整仿真源码下载 1. 研究目标 实现基于KECA的青霉素发酵过程故障监测 2. 主要研究内容 1.针对KPCA监测算法在数据降维过程中簇结构信息丢失的问题&#xff…

BootStrap案例

BootStrap是已经写好的css样式 (1)下载BootStrap 解压后放在 static文件夹–>plugins(存放插件)–>bootstrap-3.4.1 (2)使用 在页面上引入BootStrap 编写HTML时,按照BootStrap的规定来编写自定制 开发版本(一…

Web服务器群集:部署LNMP平台(yum方式安装)

目录 一、理论 1.yum安装与源码安装的区别 二、实验 1.Nginx安装(yum方式) 2.MySQL安装(yum方式) 3.PHP安装(yum方式) 4.Nginx 配置 三、问题 1.客户端 404 报错 四、总结 一、理论 1.yum安装与…

转行网络安全,报班之后就万事大吉了吗?

最近在网上看到很多人问,“是不是报了培训班就可以高枕无忧,坐等毕业之后拿高工资了?”“是不是学了网络安全,就一定能够实现月入过万了?” 其实,无论你是选择网络安全也好,还是选择其他的Java、…

自我管理型团队:企业组织力提升利器

近年来,软件项目的规模和复杂性在以前所未有的速度增长。因此,快速响应需求变化已经成为互联网行业的常态。在这样的环境下,软件产品的快速开发和迭代对于公司迅速占领市场、抢占商机来说具有至关重要的意义。 所以,越来越多的研…

Mysql高阶语句(二)

Mysql高阶语句(二) 1、别名2、子查询3、EXISTS4、连接查询5、CREATE VIEW 视图6、UNION 联集7、交集值8、无交集值9、CASE10、算排名12、算累积总计13、算总合百分比14、算累计总合百分比15、空值(null)和无值(’’&am…

大中型灌区信息化监测系统-智慧灌区

系统概述 大中型灌区信息化监测系统主要对对灌区的水情、雨情、土壤墒情、气象等信息进行监测,对重点区域进行视频监控,同时对泵站、闸门进行远程控制,实现了信息的测量、统计、分析、控制、调度等功能。为灌区管理部门科学决策提供了依据&a…

从0到1精通自动化测试,pytest自动化测试框架,skip跳过用例(八)

一、前言 pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者希望自己失败的测试功能 skip意味着只有在满足某些条件时才希望测试通过,否则pytest应该跳过运行测试。 常见示例是在非Windows平台上跳过仅限Windows的测试,或跳过测…

Nginx反向代理解决客户端ip获取问题

希望大家可以去我个人网站看本篇博客😀,纯手撸了一个月,希望大家能去看看,评论一两句/(ㄒoㄒ)/~~: RoCBlog-Nginx反向代理解决客户端ip获取问题 任务 有访客记录的需求,所以需要获取客户端IP以及地理位置…

站台「亚马逊云科技中国峰会」,我成了「开发者大讲堂」演讲嘉宾~

文章目录 ⭐️ 中国峰会可持续发展论坛亮点抢先看!⭐️ 创业者之日亮点抢先看⭐️ 开发者专属板块 | 灵感碰撞⭐️ 峰会现场 | 5大板块实现技能跃迁⭐️ 峰会报名全面启动 | 亮点抢先看 没有废话,咱直接奔主题,报名入口在文末;非常…

5.6.2 传输层编址--端口

5.6.2 传输层编址 传输层为应用进程提供了端到端的逻辑通信,两个主机之间的通信实际上是两个主机中的应用进程之间的相互通信,因此一个主机中可能有多个应用进程同时和另一个主机中多个应用进程进行通信,而网络层我们学习的网际协议能够保证…

Java设计模式之结构型-适配器模式(UML类图+案例分析)

目录 一、概念 二、UML类图 1、类适配器 2、对象适配器 三、角色设计 四、代码实现 案例一 案例二 五、总结 一、概念 将一个类的接口转换为另一个接口,使得原本由于接口不兼容的类进行兼容。 适配器模式主要分为类适配器模式和对象适配器模式&#xff0…

信息技术教师答辩题目及答案解析

小学信息技术教师《制作图文并茂的幻灯片》答辩题目 第一题 在空白幻灯片中输入输入文字? 【参考答案】 1.打开演示文稿,新建幻灯片。 2.单击“绘图”工具栏中的“横排文本框”按钮。 3.在幻灯片的任意位置拖动鼠标,出现的虚线框就是文本框。 4.在文本框…

树的基本概念和表示方法,二叉树的基本概念以及堆的概念和插入。

文章目录 树的基本概念树的基本术语树的表示双亲表示法:孩子兄弟表示法:树的典型应用——目录树 二叉树的概念及结构二叉树的概念两种特殊的二叉树二叉树的存储结构 堆的概念堆的插入 树的基本概念 树是数据结构中的一个重要组成部分,它具有一对多的特点&#xff0c…

解密软件工程的秘密武器:UML图

文章目录 一 综述二 用例图2.1 细化用例说明2.2 包含、扩展、泛化关系2.3 题目列举 三 类图和对象图四 顺序图五 状态图5.1 栗子 六 活动图七 练习7.1 用例图综合题7.2 状态图综合题 一 综述 二 用例图 用例图描述一组用例、参与者及它们之间的关系。 用户角度描述系统功能&am…

Qt自定义窗口部件/控件(实现一个十六进制微调框SpinBox)

目录 1、自定义Qt窗口部件/控件2、十六进制微调框(SpinBox)2.1、实现思路2.2、源码 3、使用方法3.1、代码添加自定义窗口部件/控件3.2、Qt设计师添加自定义窗口部件/控件3.3、运行效果 4、缺点 1、自定义Qt窗口部件/控件 在某些情况下,我们发现Qt窗口控件需要更多的自定义定制…

剑指 Offer 16. 数值的整数次方 / LeetCode 50. Pow(x, n)(快速幂)

题目: 链接:剑指 Offer 16. 数值的整数次方;LeetCode 50. Pow(x, n) 难度:中等 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问…

Java 中如何对图片进行压缩处理

问题背景 图片过大时,会造成页面卡顿甚至于报错,而且现在页面,接口,很多地儿都有报文传输的最大限制要求,另外不知道各位有没有遇到过页面渲染比较大的 base64 图片时,会非常的卡顿。所以,我们…

深入Python网络编程:从基础到实践

Python,作为一种被广泛使用的高级编程语言,拥有许多优势,其中之一就是它的网络编程能力。Python的强大网络库如socket, requests, urllib, asyncio,等等,让它在网络编程中表现优秀。本文将深入探讨Python在网络编程中的应用&#…