【C++STL基础入门】list的运算符重载和关于list的算法
文章目录
- 前言
- 一、list运算符
- 1.1 逻辑运算符
- 1.2 赋值运算符
- 二、list相关算法
- 2.1 查找函数
- 总结
前言
C++标准模板库(STL)是一组强大而灵活的工具,用于处理数据结构和算法。其中,std::list是STL中的一个重要容器,它实现了双向链表的数据结构,具有高效的插入和删除操作。本文将介绍list容器的运算符重载和相关算法,帮助初学者了解如何使用list容器。
一、list运算符
1.1 逻辑运算符
1、==:相等运算符用于检查两个 list 是否相等,即元素数量相同且对应位置上的元素值相等。
2、!=:不等运算符用于检查两个 list 是否不相等,即元素数量不同或至少有一个对应位置上的元素值不相等。
3、<=:小于等于运算符用于比较两个 list 的大小关系,基于字典顺序对其进行逐个元素的比较。返回结果为 true 表示左侧的 list 在字典顺序上小于或等于右侧的 list,否则返回 false。
4、>=:大于等于运算符用于比较两个 list 的大小关系,基于字典顺序对其进行逐个元素的比较。返回结果为 true 表示左侧的 list 在字典顺序上大于或等于右侧的 list,否则返回 false。
5、<:小于运算符用于比较两个 list 的大小关系,基于字典顺序对其进行逐个元素的比较。返回结果为 true 表示左侧的 list 在字典顺序上小于右侧的 list,否则返回 false。
6、>:大于运算符用于比较两个 list 的大小关系,基于字典顺序对其进行逐个元素的比较。返回结果为 true 表示左侧的 list 在字典顺序上大于右侧的 list,否则返回 false。
示例代码:
#include <iostream>
#include <list>int main() {std::list<int> list1 = {1, 2, 3};std::list<int> list2 = {1, 2, 3};std::list<int> list3 = {4, 5, 6};// == operatorif (list1 == list2) {std::cout << "list1 and list2 are equal" << std::endl;} else {std::cout << "list1 and list2 are not equal" << std::endl;}// != operatorif (list1 != list3) {std::cout << "list1 and list3 are not equal" << std::endl;} else {std::cout << "list1 and list3 are equal" << std::endl;}// <= operatorif (list1 <= list2) {std::cout << "list1 is less than or equal to list2" << std::endl;} else {std::cout << "list1 is greater than list2" << std::endl;}// >= operatorif (list3 >= list2) {std::cout << "list3 is greater than or equal to list2" << std::endl;} else {std::cout << "list3 is less than list2" << std::endl;}// < operatorif (list1 < list3) {std::cout << "list1 is less than list3" << std::endl;} else {std::cout << "list1 is greater than or equal to list3" << std::endl;}// > operatorif (list3 > list2) {std::cout << "list3 is greater than list2" << std::endl;} else {std::cout << "list3 is less than or equal to list2" << std::endl;}return 0;
}

1.2 赋值运算符
C++ STL中的赋值运算符(Assignment Operator)用于将一个容器的值复制给另一个容器。它允许你以一种简洁的方式将一个容器的内容复制到另一个容器中,并且可以用于同一类型的容器之间的赋值操作。
赋值运算符有以下功能:
将一个容器的值复制给另一个容器。
清空目标容器并替换为源容器的内容。
如果目标容器和源容器的类型不同,会进行相应的类型转换(如果可用)。
下面是一个使用C++ STL的赋值运算符的示例代码:
#include <iostream>
#include <vector>int main() {std::vector<int> source = {1, 2, 3}; // 源容器std::vector<int> destination; // 目标容器destination = source; // 使用赋值运算符将源容器的值复制给目标容器// 输出目标容器的内容std::cout << "目标容器的值:";for (const auto& num : destination) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

在这个示例中,我们声明了两个vector容器:source和destination。source容器包含整数1、2和3。然后,我们使用赋值运算符将source容器的值复制给destination容器。通过将源容器赋值给目标容器,目标容器将获得与源容器相同的元素。
最后,我们通过迭代目标容器中的元素,并将它们输出到控制台来验证赋值运算符的结果。
当运行这段代码时,输出将显示目标容器中的值为:1 2 3,表示赋值运算符成功将源容器的值复制给了目标容器。
二、list相关算法
2.1 查找函数
1、InputIterator find( InputIterator _First, InputIterator _Last, const Type& _Val );
函数 find 的功能如下:
find 函数用于在指定的范围内查找某个值 _Val。
它从 _First 迭代器指向的位置开始查找,一直搜索到 _Last 迭代器指向的位置(不包括 _Last)。
如果找到了匹配的值,则返回指向该值的迭代器。
如果没有找到匹配的值,则返回指向 _Last 的迭代器。
函数参数说明如下:
_First:指向要搜索的范围的起始位置的迭代器。
_Last:指向要搜索的范围的结束位置的迭代器(不包括在搜索范围内)。
_Val:要查找的值。
返回值:
返回一个迭代器,指向第一个匹配的元素。
如果没有找到匹配的元素,则返回指向 _Last 的迭代器。
下面是一个使用 find 函数的示例代码:
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};// 在 numbers 容器中查找值为 3 的元素auto it = std::find(numbers.begin(), numbers.end(), 3);if (it != numbers.end()) {// 找到了匹配的元素std::cout << "找到了值为 3 的元素,位置在:" << std::distance(numbers.begin(), it) << std::endl;} else {// 没有找到匹配的元素std::cout << "没有找到值为 3 的元素" << std::endl;}return 0;
}

在这个示例中,我们有一个整数向量 numbers,其中包含了一些整数。我们使用 std::find 函数在 numbers 容器中查找值为 3 的元素。如果找到了匹配的元素,我们输出它的位置(使用 std::distance 函数获取迭代器的位置),否则输出未找到的提示。
在运行示例代码时,输出将取决于找到与否。如果找到了值为 3 的元素,则输出其位置;否则输出未找到的提示信息。
总结
本文介绍了list容器的运算符重载和相关算法。运算符重载使得对list容器的操作更加方便和简洁,而相关算法则提供了丰富的功能来处理list容器中的元素。要熟练使用list容器,需要掌握这些运算符重载和算法的用法,并结合实际需求进行灵活运用。
通过学习list容器的运算符重载和相关算法,你将能够更加高效地操作list容器,处理数据和解决问题。希望本文能够帮助你在C++中充分发挥STL的力量,提升编程技能。
相关文章:
【C++STL基础入门】list的运算符重载和关于list的算法
文章目录 前言一、list运算符1.1 逻辑运算符1.2 赋值运算符 二、list相关算法2.1 查找函数总结 前言 C标准模板库(STL)是一组强大而灵活的工具,用于处理数据结构和算法。其中,std::list是STL中的一个重要容器,它实现了…...
查找内轮廓(孔洞)
一 说明 findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,int method, Point offset=Point());参数列表中有个数据结构参数:hierarchy(译层次结构),hierarchy是一个向量,其元素个数与查找到的轮廓总数相同,每一个…...
Git(6)——GitHub
目录 一、简介 二、概要 三、注册 四、创建仓库 五、推送本地代码 六、拉取远端代码 一、简介 在Git(5)中,我们已经对Git分支的概念和用法有了一定了解,对于在本地进行代码版本管理,其实当前所学的东西基本已经…...
【RocketMQ专题】快速实战及集群架构原理详解
目录 课程内容一、MQ简介基本介绍*作用(解决什么问题) 二、RocketMQ产品特点2.1 RocketMQ介绍2.2 RocketMQ特点2.3 RocketMQ的运行架构 三、RocketMQ快速实战3.1 快速搭建RocketMQ服务3.2 快速实现消息收发3.3 搭建Maven客户端项目3.4 搭建RocketMQ可视化…...
[设计模式] 浅谈SOLID设计原则
目录 单一职责原则开闭原则里氏替换原则接口隔离原则依赖倒转原则 SOLID是一个缩写词,代表以下五种设计原则 单一职责原则 Single Responsibility Principle, SRP开闭原则 Open-Closed Principle, OCP里氏替换原则 Liskov Substitution Principle, LSP接口隔离原则 …...
基于Java+SpringBoot+Vue的旧物置换网站设计和实现
基于JavaSpringBootVue的旧物置换网站设计和实现 源码传送入口前言主要技术系统设计功能截图数据库设计代码论文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 摘 要 随着时代在一步一步在进步,旧物也成人们的烦恼,…...
Java基本语法2
目录 Java基本语法 第一个Java程序 基本语法 Java标识符 Java修饰符 Java变量 Java数组 Java枚举 Java关键字 Java注释 Java 空行 继承 接口 Java基本语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介…...
【数据结构】树的存储结构;树的遍历;哈夫曼树;并查集
欢~迎~光~临~^_^ 目录 1、树的存储结构 1.1双亲表示法 1.2孩子表示法 1.3孩子兄弟表示法 2、树与二叉树的转换 3、树和森林的遍历 3.1树的遍历 3.1.1先根遍历 3.1.2后根遍历 3.2森林的遍历 3.2.1先序遍历森林 3.2.2中序遍历森林 4、树与二叉树的应用 4.1哈夫曼树…...
CSS选择器练习小游戏
请结合CSS选择器练习小游戏进行阅读(网页的动态效果是没有办法通过静态图片展示的) 网址:请点击 有些题有多种答案,本文就不一一列出了 第一题 答案:plate第二题 答案:bento第三题 答案:#fa…...
Python运算符、函数与模块和程序控制结构
给我家憨憨写的python教程 ——雁丘 Python运算符、函数与模块和程序控制结构 关于本专栏一 运算符1.1 位运算符1.1.1 按位取反1.1.2 按位与1.1.3 按位或1.1.4 按位异或1.1.5 左移位 1.2 关系运算符1.3 运算顺序1.4 运算方向 二 函数与模块2.1 内建函数2.2 库函数2.2.1 标准库…...
微服务保护-Sentinel
初识Sentinel 雪崩问题及解决方案 雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时&a…...
Doris 导出表结构或数据
MYSQLDUMP 导出表结构或数据 Doris 在0.15 之后的版本已经支持通过mysqldump 工具导出数据或者表结构 使用示例 导出 导出 test 数据库中的 table1 表:mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables table1导出 test 数…...
SELECT * from t_user where user_id = xxx,可以从那几个点去优化这句sql
优化SQL查询可以从以下几个方面入手: 1. 索引优化:通过为查询涉及的列添加合适的索引,可以提高查询的效率。在该SQL语句中, user_id 列被用作查询条件,可以为 user_id 列创建一个索引。 2. 避免使用 SELECT *…...
解决报错 java.lang.IllegalArgumentException: Cannot format given Object as a Date
报错原因:我们在SimpleDateFormat.format转化时间格式的时候,传入的值无法转换成date而报的错 我的代码大概就是下面这种 LocalDate now LocalDate.now();String format1 new SimpleDateFormat("yyyy-MM-dd").format(now); 发现SimpleDateF…...
【Git】03-GitHub
文章目录 1. GitHub核心功能2. GitHub搜索项目3. GitHub搭建个人博客4. 团队项目创建5. git工作流选择5.1 需要考虑的因素5.2 主干开发5.2 Git Flow5.3 GitHub Flow5.4 GitLab Flow(带生产分支)5.4 GitLab Flow(带环境分支)5.4 GitLab Flow(带发布分支) 6. 分支集成策略7. 启用…...
Java手写最短路径算法和案例拓展
Java手写最短路径算法和案例拓展 1. 算法手写的必要性 在实际开发中,经常需要处理图的最短路径问题。虽然Java提供了一些图算法库,但手写最短路径算法的必要性体现在以下几个方面: 理解算法原理:手写算法可以帮助我们深入理解最…...
深度学习实战51-基于Stable Diffusion模型的图像生成原理详解与项目实战
大家好,我是微学AI,今天给大家介绍一下深度学习实战51-基于Stable Diffusion模型的图像生成原理详解与项目实战。大家知道现在各个平台发的漂亮小姐姐,漂亮的图片是怎么生成的吗?这些生成的底层原理就是用到了Stable Diffusion模型。Stable Diffusion是一种基于深度学习的图…...
基于matlab实现的多普勒脉冲雷达回波仿真
完整程序: clear all;clc;close all; fc3e9; %载波频率 PRF2000; Br5e6; %带宽 fs10*Br; %采样频率 Tp5e-6; %脉宽 KrBr/Tp; %频率变化率 c3e8; %光速 lamda…...
Linux服务器中安装Anaconda+Tensorflow+Keras
Anaconda安装 从https://repo.anaconda.com/archive/查看你需要下载的Anaconda版本,例如2020.11的x86_64(uname -a 查看linux框架)版下载Anaconda到linux服务器, wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Li…...
ubuntu+.net6+docker 应用部署教程
先期工作 1、本地首先安装 Docker Desktop 2、本地装linux in windows 3、生成镜像 后期工作 1、云服务器部署 生成镜像方法 1、生成Dockerfile配置文件 开发工具visual studio 2022 如果项目已经存在,可以选中项目,右键点击->选择添加Docker…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
