【C++】---STL之list详解

【C++】---STL之list详解

  • 一、了解list的基本信息
  • 二、成员函数
    • 1、构造
    • 2、迭代器
    • 3、empty()
    • 4、size()
    • 5、front()
    • 6、back()
    • 7、push_front()
    • 8、pop_front()
    • 9、push_back()
    • 10、pop_back()
    • 11、insert()
    • 12、erase()
    • 13、swap()
    • 14、sort()
    • 15、reverse()

一、了解list的基本信息

1、库里面的list是一个带头双向循环链表结构!

2、优点:可以在任意位置进行插入删除,插入删除的效率比较高。

3、缺点:不支持任意位置的随机访问(因为物理空间不连续!)

二、成员函数

1、构造

在这里插入图片描述

explicit list (const allocator_type& alloc = allocator_type());	//构造空listexplicit list (size_type n, const value_type& val = value_type(),//构造一个有n个元素值为val的listconst allocator_type& alloc = allocator_type());template <class InputIterator>//构造一个list,值为InputIterator的first到last之间的元素list (InputIterator first, InputIterator last,const allocator_type& alloc = allocator_type());

2、迭代器

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

#include<list>
#include<iostream>
using namespace std;int main()
{list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);lt1.push_back(5);list<int>::iterator it = lt1.begin();while (it != lt1.end()){cout << *it << " ";it++;}cout << endl;return 0;
}

在这里插入图片描述

3、empty()

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

4、size()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);lt1.push_back(5);//list<int>::iterator it = lt1.begin();//while (it != lt1.end())//{//	cout << *it << " ";//	it++;//}//cout << endl;//cout << lt1.empty() << endl;cout << lt1.size()<<endl;return 0;
}

在这里插入图片描述

5、front()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);lt1.push_back(5);cout << lt1.front() << endl;return 0;
}

在这里插入图片描述

6、back()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);lt1.push_back(5);//cout << lt1.front() << endl;cout << lt1.back() << endl;return 0;
}

在这里插入图片描述

7、push_front()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_front(1);lt1.push_front(2);lt1.push_front(3);lt1.push_front(4);lt1.push_front(5);for (auto e : lt1){cout << e << " ";}cout << endl;return 0;
}

在这里插入图片描述

8、pop_front()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_front(1);lt1.push_front(2);lt1.push_front(3);lt1.push_front(4);lt1.push_front(5);for (auto e : lt1){cout << e << " ";}cout << endl;lt1.pop_front();lt1.pop_front();lt1.pop_front();for (auto e : lt1){cout << e << " ";}cout << endl;return 0;
}

在这里插入图片描述

9、push_back()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);lt1.push_back(5);for (auto e : lt1){cout << e << " ";}cout << endl;return 0;
}

在这里插入图片描述

10、pop_back()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);lt1.push_back(5);for (auto e : lt1){cout << e << " ";}cout << endl;lt1.pop_back();lt1.pop_back();lt1.pop_back();for (auto e : lt1){cout << e << " ";}cout << endl;return 0;
}

在这里插入图片描述

11、insert()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);lt1.push_back(5);list<int>::iterator pos = find(lt1.begin(), lt1.end(), 2);//在链表中查找值为2的元素,并返回它的迭代器lt1.insert(pos, 100);// 在pos位置之前插入100for (auto e : lt1){cout << e << " ";}cout << endl;return 0;
}

在这里插入图片描述

12、erase()

在这里插入图片描述

改变底层的数据结构,迭代器失效:

int main()
{list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);lt1.push_back(5);list<int>::iterator pos = find(lt1.begin(), lt1.end(), 3);// 擦除元素值为3的lt1.erase(pos);cout << *pos << endl;// pos的位置的元素的值已经被删除了。//此时如果不对pos的位置的迭代器进行重新赋值更新,那么pos就是一个野指针,非法访问。for (auto e : lt1){cout << e << " ";}cout << endl;return 0;
}

在这里插入图片描述
erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代 器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是 没有元素的,那么pos就失效了。因此删除list中任意位置上元素时,vs就认为该位置迭代器失效 了。

13、swap()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);lt1.push_back(4);lt1.push_back(5);list<int> lt2;lt2.push_back(1);lt2.push_back(1);lt2.push_back(1);lt2.push_back(1);lt2.push_back(1);cout << "lt1交换前:";for (auto e : lt1){cout << e << " ";}cout << endl;lt1.swap(lt2);// lt1 和 lt2内容进行交换cout << "lt1交换后:";for (auto e : lt1){cout << e << " ";}cout << endl;return 0;
}

在这里插入图片描述

14、sort()

在这里插入图片描述
sort()函数默认是:排升序!

int main()
{list<int> lt1;lt1.push_back(4);lt1.push_back(3);lt1.push_back(5);lt1.push_back(1);lt1.push_back(2);for (auto e : lt1){cout << e << " ";}cout << endl;lt1.sort();for (auto e : lt1){cout << e << " ";}cout << endl;return 0;
}

在这里插入图片描述

15、reverse()

在这里插入图片描述

int main()
{list<int> lt1;lt1.push_back(4);lt1.push_back(3);lt1.push_back(5);lt1.push_back(1);lt1.push_back(2);for (auto e : lt1){cout << e << " ";}cout << endl;lt1.sort();for (auto e : lt1){cout << e << " ";}cout << endl;lt1.reverse();for (auto e : lt1){cout << e << " ";}return 0;
}

在这里插入图片描述


好了,今天的分享就到这里了
如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!
在这里插入图片描述

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

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

相关文章

Java同时使用@RequestBody和@RequestParam传参在postman中执行请求报错:Unsupported Media Type

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

C语言数据结构之栈

目录 1.栈的概念及结构2.栈的实现3.栈的代码实现4.相关例题 •͈ᴗ•͈ 个人主页&#xff1a;御翮 •͈ᴗ•͈ 个人专栏&#xff1a;C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插…

ElasticSearch集群

我们ES集群主要解决的是这两个问题&#xff1a;海量数据存储问题、单点故障问题 海量数据存储问题&#xff1a;单机的ES&#xff0c;数据存储能力是有上限的 单点故障问题&#xff1a;如果单机上的Elasticsearch节点发生故障&#xff0c;整个系统会停止服务&#xff0c;导致数据…

Xcode隐私协议适配

1. Privacy manifest files 1.1 简介 自己App或三方SDK&#xff08;通过XCFrameworks|Swift packages|Xcode projects集成的&#xff09;需要包含一个隐私清单文件&#xff08;privacy manifest&#xff09;叫作 PrivacyInfo.xcprivacy。它是一个属性列表&#xff0c;记录了A…

[C++基础学习]----03-程序流程结构之循环结构详解

前言 在C程序中&#xff0c;循环结构在用于重复执行一段代码块&#xff0c;直到满足某个条件为止。循环结构有多种形式&#xff0c;包括while循环、do-while循环和for循环。 正文 01-循环结构简介 1、while循环语句&#xff1a; while循环在每次循环开始前检查条件是否为真&a…

【利兹】XJCO3910/COMP391001 Combinatorial Optimisation组合优化/运筹学 cw考试资料辅导

COMP391001| XJCO3910 (36642) 西交利兹院 Combinatorial Optimisation组合优化/运筹学 资料or辅导 需要请私聊 1.独家近年考试题 包你高分 2. cw and 官方标准答案 3. worksheets and solutions

【docker】安装openjdk

查看可用的 openjdk版本 docker hub 查看地址&#xff1a;https://hub.docker.com/_/openjdk 此图片已被正式弃用&#xff0c;建议所有用户尽快找到并使用合适的替代品。其他官方形象替代品的一些例子&#xff08;按字母顺序列出&#xff0c;没有有意或暗示的偏好&#xff09;…

机器学习:深入解析SVM的核心概念(问题与解答篇)【一、间隔与支持向量】

直接阅读原始论文可能有点难和复杂&#xff0c;所以导师直接推荐我阅读周志华的《西瓜书》&#xff01;&#xff01;然后仔细阅读其中的第六章&#xff1a;支持向量机 间隔与支持向量 问题一&#xff1a;什么叫法向量&#xff1f;为什么是叫法向量 在这个线性方程中&#xff…

给大一大二师生的忠告,如何在校招中脱颖而出做到降维打击

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

[超详细]Java子父类树形结构查询和删除[小白]

目录 前言 1、查询子父类通过树形结构封装起来 一、创建实体类 二、创建mapper类 三、创建service和serviceImpl类 四、创建controller类 2、删除该父类下的所有子类&#xff0c;并且删除自己 controller层 service和serviceImpl层 总结 前言 [超详细]Java子父类树形…

STM32与Proteus的串口仿真详细教程与源程序

资料下载地址&#xff1a;STM32与Proteus的串口仿真详细教程与源程序 资料内容 包含LCD1602显示&#xff0c;串口发送接收&#xff0c;完美实现。 文档内容齐全&#xff0c;包含使用说明&#xff0c;相关驱动等。 解决了STM32的Proteus串口收发问题。 注意&#xff1a;每输…

Datart 扩装下载功能之PDF和图片下载

Datart 扩装下载功能之PDF和图片下载 首先下载依赖 yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts -y 然后下载安装chrome yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 查看chrome版本号 google…

基于Vue3实现的 宫格 图片摆放

一个可以支持无限宫格的 vue3实现 本来要参考微信群头像的规则实现&#xff0c;网上找到一大堆类似的需求&#xff0c;奈何XXX折磨人&#xff0c;九宫格已经不能满足ta了。 当前代码实现了………… 好多东西(可以多宫格).具体的看效果图 code <style scoped langless> .…

AI预测体彩排列3第2套算法实战化测试第5弹2024年4月27日第5次测试

今天继续进行新算法的测试&#xff0c;今天是第5次测试。好了&#xff0c;废话不多说了&#xff0c;直接上图上结果。 2024年4月27日体彩排3预测结果 6码定位方案如下&#xff1a; 百位&#xff1a;6、2、1、7、8、9 十位&#xff1a;8、9、4、3、1、0 个位&#xff1a;3、7、8…

【SpringBoot整合系列】SpringBoot整合Redis[附redis工具类源码]

目录 SpringBoot整合Redis1.下载和安装Redis2.新建工程&#xff0c;导入依赖3.添加配置4.先来几个基本的示例测试代码输出结果用redis客户端查看一下存储内容 5.封装redis工具类RedisKeyUtilRedisStringUtilRedisHashUtilRedisListUtilRedisSetUtilRedisZsetUtil备注 6.测试通用…

node.js 解析post请求 方法二

前提&#xff1a;以前面发的node.js解析post请求方法一为模板&#xff0c;具体见 http://t.csdnimg.cn/ABaIn 此文我们运用第二种方法&#xff1a;使用第三方模块formidable对post请求进行解析。 1》代码难点 *** 在Node.js中使用formidable模块来解析POST请求主要涉及到处理…

IO流基础

IO流介绍 1.什么是IO流&#xff1f; 流是一种抽象概念&#xff0c;它代表了数据的无结构化传递。按照流的方式进行输入输出&#xff0c;数据被当成无结构的字节序列或字符序列。从流中取得数据的操作称为提取操作&#xff0c;而向流中添加数据的操作称为插入操作。用来进行输入…

JVM (Micrometer)监控SpringBoot(AWS EKS版)

问题 怎样使用JVM (Micrometer)面板&#xff0c;监控Spring&#xff1f;这里不涉及Prometheus和Grafana&#xff0c;重点介绍与Micrometer与Springboot&#xff0c;k8s怎样集成。 pom.xml 引入依赖&#xff0c;如下&#xff1a; <properties><micrometer.version&…

免费简单好用的内网穿透工具(ngrok、natapp),微信回调地址配置

B站视频地址 文章目录 Natapp1、登录注册账号、下载软件2、使用2-1、购买隧道、查看token2-2、端口穿透 Ngrok1、登录注册账号、下载软件2、使用2-1、获取并设置 token2-2、使用 3、隧道 微信回调配置1、注册测试公众号2、回调代码3、回调配置 在一些特殊的场景下&#xff0c;需…

多种方法求1+12+123+1234……

有网友出了一道题&#xff1a; 从键盘输入一个小于10的正整数n&#xff0c;计算1121231234……&#xff0c;即前n项之和。 第一眼看到题目&#xff0c;直觉告诉我必须使用嵌套的两个for循环&#xff0c;里面的循环生成每一项&#xff0c;外面的循环求和。错误的方向和思路让我…