【C++STL基础入门】list的运算符重载和关于list的算法

news2024/11/26 15:50:54

文章目录

  • 前言
  • 一、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};

    // == operator
    if (list1 == list2) {
        std::cout << "list1 and list2 are equal" << std::endl;
    } else {
        std::cout << "list1 and list2 are not equal" << std::endl;
    }

    // != operator
    if (list1 != list3) {
        std::cout << "list1 and list3 are not equal" << std::endl;
    } else {
        std::cout << "list1 and list3 are equal" << std::endl;
    }

    // <= operator
    if (list1 <= list2) {
        std::cout << "list1 is less than or equal to list2" << std::endl;
    } else {
        std::cout << "list1 is greater than list2" << std::endl;
    }

    // >= operator
    if (list3 >= list2) {
        std::cout << "list3 is greater than or equal to list2" << std::endl;
    } else {
        std::cout << "list3 is less than list2" << std::endl;
    }

    // < operator
    if (list1 < list3) {
        std::cout << "list1 is less than list3" << std::endl;
    } else {
        std::cout << "list1 is greater than or equal to list3" << std::endl;
    }

    // > operator
    if (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的力量,提升编程技能。

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

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

相关文章

Hyper-V 虚拟机CentOS配置网络(三)

总目录 https://preparedata.blog.csdn.net/article/details/132877836 文章目录 总目录一、创建交换机二、共享网络给交换机三、虚拟机配置交换机四、配置CentOS网络 一、创建交换机 二、共享网络给交换机 打开物理宿主机的控制面板的网络链接中心&#xff0c;此时已经多了一…

嵌入式Linux驱动开发(I2C专题)(七)

使用GPIO操作I2C设备_IMX6ULL 参考资料&#xff1a; Linux文档 Linux-5.4\Documentation\devicetree\bindings\i2c\i2c-gpio.yamlLinux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txt Linux驱动源码 Linux-5.4\drivers\i2c\busses\i2c-gpio.cLinux-4.9.88\driv…

成集云 | 金蝶K3与旺店通ERP集成(旺店通主管库存)| 解决方案

源系统成集云目标系统 方案介绍 金蝶K3是一款ERP软件&#xff0c;它集成了供应链管理、财务管理、人力资源管理、客户关系管理、办公自动化、商业分析、移动商务、集成接口及行业插件等业务管理组件。以成本管理为目标&#xff0c;计划与流程控制为主线&#xff0c;…

掌动智能:高效实用的Web自动化测试工具

在当今的软件开发领域&#xff0c;快速且高质量的Web应用程序开发和测试至关重要。为了满足这一需求&#xff0c;掌动智能推出了一款高效实用的Web自动化测试工具&#xff0c;帮助测试人员提高测试效率、提升产品质量&#xff0c;并加速交付速度。 掌动智能&#xff1a;引领自动…

代码随想录算法训练营第55天 | ● 392.判断子序列 ● 115.不同的子序列

文章目录 前言一、392.判断子序列二、115.不同的子序列总结 前言 动态规划&#xff1b; 一、392.判断子序列 这道题应该算是编辑距离的入门题目&#xff0c;因为从题意中我们也可以发现&#xff0c;只需要计算删除的情况&#xff0c;不用考虑增加和替换的情况。 所以掌握本题的…

73、SpringBoot 直接整合 JDBC

★ Spring Boot可直接整合JDBC来操作数据库 ——很少这么干&#xff0c;这么干就意味着使用最原始的方式来操作数据库。对于对于极小的项目&#xff0c;直接整合JDBC无需添加JPA、Hibernate等ORM框架。★ JdbcTemplate 为项目添加spring-boot-starter-jdbc.jar依赖&#xff0…

R语言绘图-3-Circular-barplot图

0. 参考&#xff1a; https://r-graph-gallery.com/web-circular-barplot-with-R-and-ggplot2.html 1. 说明&#xff1a; 利用 ggplot 绘制 环状的条形图 (circular barplot)&#xff0c;并且每个条带按照数值大小进行排列。 2 绘图代码: 注意&#xff1a;绘图代码中的字体…

redis 哨兵(sentinel)机制

1. 前言 sentinel&#xff08;哨兵&#xff09;是Redis 的高可用性解决方案之一。通过哨兵可以创建一个当主服务器出现故障时自动将从服务器升级为主服务器的分布式系统&#xff0c;解决了主从复制出现故障时需要人为干预的问题。 redis 的主从复制的作用有数据预热、负载均衡…

UML基础与应用之对象图

什么是对象图&#xff1f; 对象图表示一组对象及它们之间的关系&#xff0c;是某一时刻系统详细信息的快照&#xff0c;描述系统交互的静态图形&#xff0c;它由协作的对象组成&#xff0c;但不包含在对象之间传递的任何消息。因为对象是类的实例化&#xff0c;所以说某一时刻…

步步为营,如何将GOlang引用库的安全漏洞修干净

文章目录 引场景构建第一步、直接引用的第三方库升级修复策略1.确认是否为直接引用的第三方库2.找到需要升级的版本是否为release版本 第二步、间接引用的第三方库升级修复策略那么问题来了&#xff0c;我们这么间接引用库的对应的直接引用库是哪个呢&#xff1f; &#xff08;…

uni-app实现web-view图片长按下载

<template><view><web-view :webview-styles"webviewStyles" :src"webUrl"></web-view></view> </template> uniapp的web-view中图片无法长按保存&#xff0c;IOS下是正常的&#xff0c;但是Android下长按无反应 解…

在测试过程中引入可观测性平台提升业务质量

作者 观测云 产品技术专家 成都办公室 - 刘跃兰 前言 随着微服务技术的发展&#xff0c;微服务概念已深入人心&#xff0c;越来越多的企业开始使用微服务架构来开发业务应用。业务应用系统的整体架构变得更加复杂&#xff0c;并存在各种各样的不确定性因素&#xff0c;从而对…

nginx+keepalived集群搭建

1. nginx部署 单机部署可参考&#xff1a;https://blog.csdn.net/ym5209999/article/details/119897237 2. keepalived安装 [rootnginx1 ~]# yum -y install keepalived3. keepalived配置 3.1 安装完成后&#xff0c;默认配置文件位于&#xff1a;/etc/keepalived&#xff…

奶奶都看的懂的《栈》(C语言实现,超详细解析 !!!)

目录 一、前言 二、栈 &#x1f34e;栈的概念 &#x1f350;栈的结构​编辑 &#x1f349;栈的实现 &#x1f34a;栈 各个接口的实现 ⭕ 定义一个 栈 结构体 ⭕栈 的初始化 ⭕ 栈 的尾插 ⭕ 栈 的尾删 ⭕ 栈 内数据个数 ⭕ 获取 栈 顶元素 ⭕ 判断 栈 是否为空 ⭕…

Linux-网卡和网络配置

链接一篇大佬的博客&#xff1a;Linux之手把手教会修改网卡名称 文章目录 修改网卡名称步骤1&#xff1a;修改“/etc/default/grub”步骤2&#xff1a;修改“/etc/sysconfig/network-scripts”下的文件步骤3&#xff1a;修改“ifcfg-eth0”配置步骤4&#xff1a;判断操作系统的…

AIGC入门 - LLM 信息概览

本文将介绍以下 LLM OPTLLaMaAlpacaVicunaMosschatGLMBaichuanOpenbuddy 一、OPT 1、背景 OPT全称Open Pre-trained Transformer Language Models&#xff0c;即“开放的预训练Transformer语言模型”&#xff0c;是 Meta AI 团队在2022年5月发布了开源大模型OPT-175B&#…

Ninja: Towards Transparent Tracing and Debugging on ARM【TEE的应用】

目录 摘要引言贡献 背景TrustZone和受信任的固件PMU和ETM 相关工作x86上的透明恶意软件分析ARM上的动态分析工具基于仿真的系统硬件虚拟化裸机系统 Trustzone相关的系统 系统架构具体实现和评估可以看论文&#xff0c;这里不赘述了讨论总结 作者&#xff1a;Zhenyu Ning and Fe…

ffmpeg编译 Error: operand type mismatch for `shr‘

错误如下&#xff1a; D:\msys2\tmp\ccUxvBjQ.s: Assembler messages: D:\msys2\tmp\ccUxvBjQ.s:345: Error: operand type mismatch for shr D:\msys2\tmp\ccUxvBjQ.s:410: Error: operand type mismatch for shr D:\msys2\tmp\ccUxvBjQ.s:470: Error: operand type mismatch…

BCrypt 密码数据加解密运用

前言&#xff1a; 当涉及到存储用户密码时&#xff0c;确保密码的安全非常重要。以往&#xff0c;我们通常都是采用 MD5 这种不可逆算法来进行密码数据的加密后存储&#xff0c;虽然MD5算法是一种常见的哈希函数&#xff0c;但是它已经不再被认为是安全的选项。 常规MD5加密&a…

趣解设计模式之《小王的学习秘籍》

〇、小故事 小王是学校的学霸&#xff0c;凭借着自己的天赋以及对于学习的刻苦&#xff0c;每次考试都能排到年级第一名。但是&#xff0c;他所在的班级总成绩却不高&#xff0c;在所有班级中&#xff0c;属于中游水平。老师希望通过小王的贡献&#xff0c;能否帮助整个班级同…