【C++】STL中list的使用

前言:在前面学习的 过程中我们学习了STL中的string,vector,今天我们来进一步的学习STL中的list的使用方法。

💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:高质量C++学习 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!
在这里插入图片描述


目录标题

  • List常见的使用方法
    • 什么是list
    • List的常见构造方式
    • list中迭代器的使用
    • list的增删改查
    • list访问和修改元素
    • 元素的数量和清空list
    • 对list进行升序排序
    • 反转list中的元素的顺序
    • 删除list中所有等于给定值的元素


List常见的使用方法

什么是list

在C++中,list是一个双向链表容器(带头双向链表如下所示)。它是C++标准库中的一种容器类型,可以用来存储和管理数据。list的特点是可以高效地执行插入和删除操作,但是在访问和搜索元素方面相对较慢。

list的元素类型可以是任意类型,包括基本数据类型和自定义的对象类型。list容器提供了一系列的成员函数和操作符,可以用于在链表中插入、删除和访问元素,以及对链表进行遍历和操作。

通过使用list容器,可以方便地实现一些功能,如实现队列或栈、排序和合并链表等。由于其特殊的数据结构,list在某些场景下比其他容器类型更适用,例如需要高效地在容器中插入和删除元素,而对访问元素的速度要求较低的情况。

在这里插入图片描述


List的常见构造方式

在C++中,list可以通过多种方式进行构造。以下是几种常见的构造方式:

  1. 默认构造函数:创建一个空的list对象。

    std::list<int> myList; // 创建一个空的list对象
    
  2. 带有初始化列表的构造函数:使用初始化列表创建一个list对象,并将其中的元素添加到list中。

    std::list<int> myList = {1, 2, 3}; // 使用初始化列表创建list对象并添加元素
    
  3. 带有指定元素个数和初始值的构造函数:创建一个包含指定元素个数和初始值的list对象。

    std::list<int> myList(5, 0); // 创建一个包含5个初始值为0的元素的list对象
    
  4. 通过迭代器范围构造函数:创建一个list对象,并将指定范围内的元素添加到list中。

    std::vector<int> vec = {1, 2, 3};
    std::list<int> myList(vec.begin(), vec.end()); // 通过迭代器范围创建一个list对象,并将vec中的元素添加到list中
    
  5. 拷贝构造函数:使用另一个list对象创建一个新的list对象,两个list对象共享元素。

    std::list<int> myList1 = {1, 2, 3};
    std::list<int> myList2(myList1); // 使用myList1创建一个新的list对象myList2,两个list对象共享元素
    

这些是一些常见的list构造方式,可以根据实际需求选择合适的方式来构造list对象。


list中迭代器的使用

在C++中,可以使用list的iterator来访问和操作list容器中的元素。以下是一些常见的list iterator的使用方法。

  1. 声明和初始化iterator
std::list<int> mylist = { 1,2,3,4,5 };
std::list<int>::iterator it = mylist.begin();//获取指向list第一个元素的迭代器
std::list<int>::iterator end = mylist.end(); // 获取指向list尾部的迭代器
  1. 迭代器遍历list
int main()
{std::list<int> mylist = { 1,2,3,4,5 };std::list<int>::iterator it = mylist.begin();//获取指向list第一个元素的迭代器std::list<int>::iterator end = mylist.end(); // 获取指向list尾部的迭代器while (it != end){std::cout << *it << " "; // 使用*操作符获取迭代器指向的元素it++;}return 0;
}

在这里插入图片描述
3. 使用迭代器修改list元素

int main()
{std::list<int> mylist = { 1,2,3,4,5 };std::list<int>::iterator it = mylist.begin();//获取指向list第一个元素的迭代器std::list<int>::iterator end = mylist.end(); // 获取指向list尾部的迭代器while (it != end){if (*it != 5)//通过迭代器修改元素的值{*it = 5;}std::cout << *it << " "; // 使用*操作符获取迭代器指向的元素it++;}return 0;
}

在这里插入图片描述
4. 范围for遍历list:

int main()
{list<int> mylist;vector<int> vec = { 1,3,4,5 };list<int> lt(vec.begin(), vec.end());list<int>::iterator it = lt.begin();for (auto e : lt){cout << *it << " ";it++;}return 0;
}

list的增删改查

myList.push_back(10); // 在list尾部添加元素
myList.push_front(20); // 在list头部添加元素
myList.pop_back(); // 删除list尾部的元素
myList.pop_front(); // 删除list头部的元素

list访问和修改元素

int firstElement = myList.front(); // 访问list头部的元素
int lastElement = myList.back(); // 访问list尾部的元素
myList.front() = 100; // 修改list头部的元素
myList.back() = 200; // 修改list尾部的元素

元素的数量和清空list

int size = myList.size(); // 获取list中元素的数量
bool isEmpty = myList.empty(); // 判断list是否为空
myList.clear(); // 清空list中的所有元素

对list进行升序排序

int main()
{list<int> lt = { 10,20,0,-1,9,20,30 };lt.sort();list<int>::iterator it = lt.begin();for (auto e : lt){cout << *it << " ";it++;}return 0;
}

在这里插入图片描述


反转list中的元素的顺序

int main()
{list<int> lt = { 10,20,0,-1,9,20,30 };lt.sort();list<int>::iterator it = lt.begin();for (auto e : lt){cout << *it << " ";it++;}cout << endl;lt.reverse();//更新迭代器,因为迭代器失效it = lt.begin();for (auto e : lt){cout << *it << " ";it++;}return 0;
}

在这里插入图片描述


删除list中所有等于给定值的元素

int main()
{list<int> lt = { 10,10,20,30,10};lt.remove(10);//删除所有为10的元素list<int>::iterator it = lt.begin();for (auto e : lt){cout << *it << " ";it++;}return 0;
}

在这里插入图片描述
这些是一些list常见功能的使用方法,可以根据实际需求选择合适的方式来操作和处理list容器中的元素


好啦,今天的内容就到这里啦,下期内容预告stl中list的使用.


结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。


🌏🗺️ 这里祝各位接下来的每一天好运连连 💞💞

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

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

相关文章

全志D1s软件入门之Tina Linux烧写教程

烧写 Tina Linux 烧写&#xff0c;即将编译打包好的固件下载到设备 烧写方式简介 全志平台为开发者提供了多种多样的烧写方式和烧写工具&#xff1a; &#xff08;1&#xff09; PhoenixSuit&#xff1a;基于Windows的系统的烧写工具&#xff0c;是最常用的烧写工具&#x…

树莓派4b安装宝塔面板

1、打开命令窗口&#xff0c;执行如下命令 #更新 sudo apt-get update sudo apt-get upgrade #切换root权限 sudo su root #安装宝塔面板 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh安装过程有点久&#xff0c;会持…

【文末附gpt升级秘笈】探索AGI之路:穿越大模型的冰与火,谱写未来技术的乐章

探索AGI之路&#xff1a;穿越大模型的冰与火&#xff0c;谱写未来技术的乐章 摘要 随着人工智能技术的飞速发展&#xff0c;大模型成为了业界关注的焦点。然而&#xff0c;大模型并非万能&#xff0c;其背后隐藏着诸多迷思与挑战。本文基于“AGI技术50人”访谈栏目的素材&…

01——生产监控平台——WPF

生产监控平台—— 一、介绍 VS2022 .net core(net6版本&#xff09; 1、文件夹&#xff1a;MVVM /静态资源&#xff08;图片、字体等&#xff09; 、用户空间、资源字典等。 2、图片资源库&#xff1a; https://www.iconfont.cn/ ; 1.资源字典Dictionary 1、…

C++系统编程篇——linux编译器 gcc/g++(链接动静态库)

linux编译器-gcc/g &#xff08;1&#xff09;g安装&#xff08;gcc一般自带&#xff0c;g需要下载&#xff09; sudo yum install -y gcc-c g --version gcc用于编译C语言代码&#xff0c;g用于编译C代码 &#xff08;2&#xff09;程序翻译过程 选项“-o”是指目标文件…

Leetcode 3181. Maximum Total Reward Using Operations II

Leetcode 3181. Maximum Total Reward Using Operations II 1. 解题思路2. 代码实现 题目链接&#xff1a;3181. Maximum Total Reward Using Operations II 1. 解题思路 这一题的话思路上依然还是动态规划的思路&#xff0c;核心的迭代关系式如下&#xff1a; def dp(idx,…

Python的return和yield,哪个是你的菜?

目录 1、return基础介绍 &#x1f4da; 1.1 return用途&#xff1a;数据返回 1.2 return执行&#xff1a;函数终止 1.3 return深入&#xff1a;无返回值情况 2、yield核心概念 &#x1f347; 2.1 yield与迭代器 2.2 生成器函数构建 2.3 yield的暂停与续行特性 3、retur…

关于使用spring boot自带的jackson解析xml心得

一、声明版本依赖 项目负责版本管理的pom依赖如下声明引用 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/></parent…

react+wijmo所遇问题

1.官网地址&#xff1a;https://demo.mescius/wijmo/demos/Grid/Overview/react 别进中文地址&#xff0c;注意后缀mescius有没有.cn有的话删掉&#xff0c;那个没有触发方法和各类API&#xff0c;组件也不全 2.中文地址&#xff1a;&#xff08;不太好用&#xff09;&#x…

Flask-REXTx 学习笔记——1.响应编组(Response marshalling)

记录对Flask-REXTx的学习笔记 简介 Flask-RESTx是一个基于Flask的扩展&#xff0c;它提供了一些额外的功能来帮助开发人员更轻松地构建强大的RESTful API。这些功能包括API文档的自动生成、请求参数解析和API资源管理等。Flask-RESTx的目标是在维护API时能够提供更好的文档和…

MFC 教程-回车时窗口退出问题

【问题描述】 MFC窗口默认时&#xff0c;按回车窗口会退出 【原因分析】 默认调用OnOK() 【解决办法】 重写虚函PreTranslateMessage BOOL CTESTMFCDlg::PreTranslateMessage(MSG* pMsg) {// TODO: 在此添加专用代码和/或调用基类// 修改回车键的操作反应 if (pMsg->…

C++11新特性【上】(统一的列表初始化、auto、decltype、右值引用、万能引用、完美转发)

一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了 C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞 进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合…

Web前端中级探索:技术进阶与困惑之旅

Web前端中级探索&#xff1a;技术进阶与困惑之旅 在Web开发领域&#xff0c;前端技术扮演着至关重要的角色。对于中级前端开发者而言&#xff0c;这是一个既充满挑战又充满机遇的阶段。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入探讨Web前端中级阶段的技…

高德地图简单实现点标,和区域绘制

高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart 百度搜索高德地图开发平台 注册高德地图开发账号 在应用管理中 我的应用中 添加一个Key 点击提交 进入高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart …

Mysql 的分布式策略

1. 前言 MySQL 作为最最常用的数据库&#xff0c;了解 Mysql 的分布式策略对于掌握 MySQL 的高性能使用方法和更安全的储存方式有非常重要的作用。 它同时也是面试中最最常问的考点&#xff0c;我们这里就简单总结下 Mysq 的常用分布式策略。 2. 复制 复制主要有主主复制和…

使用 C# 学习面向对象编程:第 2 部分

C# 类属性简介 属性在面向对象编程中起着至关重要的作用。它们允许我们从类外部访问类的私有变量。在类中使用私有变量是很好的。属性看起来像变量和方法的组合。属性有部分&#xff1a;“get 和 set”方法。get 方法应该返回变量&#xff0c;而 set 方法应该为其赋值。 步骤…

Chat-TTS:windows本地部署实践【有手就行】

最近Chat-TTS模型很火&#xff0c;生成的语音以假乱真&#xff0c;几乎听不出AI的味道。我自己在本地部署玩了一下&#xff0c;记录一下其中遇到的问题。 环境&#xff1a; 系统&#xff1a;windows 11 GPU&#xff1a; Nvidia 4060 Cuda&#xff1a;12.1&#xff08;建议安…

【前端】详解JavaScript事件代理(事件委托)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

3 数据类型、运算符与表达式-3.3.2 整型变量(原码,反码,补码)

在计算机科学中&#xff0c;补码、原码和反码是用来表示带符号整数的二进制编码方法&#xff0c;特别是在计算机内存中存储和处理整数时。这些编码方式帮助计算机区分正数和负数&#xff0c;并支持算术运算。以下是它们的具体含义&#xff1a; 原码&#xff08;True Form or S…

【OC】类与对象

类与对象 定义类接口部分定义成员变量方法说明实现部分 对象的产生与使用对象与指针self关键字避免重复创建 id类型方法详解方法的所属性形参个数可变的方法 成员变量成员变量及其运行机制多个实例中内存示意图模拟类变量单例模式 类是面向对象的重要内容&#xff0c;我们可以把…