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

news/2024/5/18 15:57:54

【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.mrgr.cn/p/84710754

相关文章

WAF防范原理

目录 一、什么是WAF 二、纵深安全防御 WAF的组网模式 WAF配置全景 WAF端 服务器 攻击端 拦截SQL注入&#xff0c;XSS攻击&#xff0c;木马文件上传 要求&#xff1a; 使用WAF&#xff0c;通过配置策略要求能防御常见的web漏洞攻击&#xff08;要求至少能够防御SQL、XSS、文…

4.22日团队博客

今天进行了晨会 晨会成员:董茂欣、刘雪超、龚涵彬同时统计了昨天所做的内容,主要为登录和注册接口的书写和个人页面的制作

VScode如果展开空白的文件夹

1点击左下方小齿轮 2点击settings 3搜索框搜索compactFolders 4将Compact Folders勾上的复选框去掉

WPF开源轻便、快速的桌面启动器

前言 今天大姚给大家分享一款WPF开源、简单、轻便、快速的桌面启动器(支持多主题、多语言:简体中文、繁体中文、英文等):CurvaLauncher。 WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、数据绑定、样式和模板、…

.NET周刊【4月第2期 2024-04-21】

国内文章 他来了他来了,.net开源智能家居之苹果HomeKit的c#原生sdk【Homekit.Net】1.0.0发布,快来打造你的私人智能家居吧 https://www.cnblogs.com/hezp/p/18142099 三合是一位不喜欢动态编程语言的开发者,对集成米家智能家居到苹果HomeKit的现有开源解决方案不满意。因为遇…

HASHCTF2024

Secret of Keyboard 签到脚本题,有些同学的脚本解出来大小写不正确可能是由于脚本无法识别shift+字母的组合键 首先使用tshark: tshark -r usb.pcap -T fields -e usb.capdata | sed /^\s*$/d > usbdata.txt 提取数据并删除空格 然后脚本一把梭出来:keyboard.py: normalK…

restful请求风格的增删改查-----修改and删除

一、修改&#xff08;和添加类似&#xff09; 前端&#xff1a; <script type"text/javascript">function update(){//创建user对象var user {id:$("#id").val(),username:$("#username").val(),password:$("#password").val…

网络中其他协议

目录 DNS协议 域名简介 ICMP协议 ICMP功能 ICMP协议格式 ping命令 NAT技术 NATP NAT技术的限制 代理服务器 DNS协议 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;协议&#xff0c;是一个用来将域名转化为IP地址的应用层协议。 为什么有这个协…

Redis篇:缓存更新策略最佳实践

前景&#xff1a; 缓存更新是redis为了节约内存而设计出来的一个东西&#xff0c;主要是因为内存数据宝贵&#xff0c;当我们向redis插入太多数据&#xff0c;此时就可能会导致缓存中的数据过多&#xff0c;所以redis会对部分数据进行更新&#xff0c;或者把他叫为淘汰更合适&a…

报销管理的新篇章:凉鞋ERP软件的便利性

在当今商业环境中&#xff0c;报销管理是企业财务管理的重要组成部分。报销管理不仅涉及到员工费用的合理报销&#xff0c;还涉及到企业财务数据的准确性和合规性。顺通凉鞋ERP软件具备智能审批管理功能&#xff0c;能够降低报销审批过程中的风险。顺通凉鞋ERP软件还具备强大的…

Educational Codeforces Round 164 (Rated for Div. 2) A-E

A. Painting the Ribbon 暴力模拟即可 #include <bits/stdc.h>using namespace std; const int N 2e5 5; typedef long long ll; typedef pair<ll, ll> pll; typedef array<ll, 3> p3; // int mod 998244353; const int maxv 4e6 5; // #define endl &…

国密SSL证书在等保、关保、密评合规建设中的应用

在等保、关保、密评等合规建设中&#xff0c;网络和通信安全方面的建设是非常重要的部分&#xff0c;需要实现加密保护和安全认证&#xff0c;确保传输数据机密性、完整性以及通信主体可信认证。国密SSL证书应用于等保、关保和密评合规建设中&#xff0c;不仅能够提升网络信息系…

排序5-快速排序

排序5-快速排序快速排序(正序) 利用分而治之的思想+挖坑填数排序, 选择一个基准数, 将小于基准数的元素全部放在基准数左边, 大于基准数的元素全部放在基准数右侧.再对剩下的部分进行快速排序快速排序c++实现(正序) //快速排序(正序) void quickSort(int arr[], int start, int…

自己写的爬虫小案例

网址&#xff1a;aHR0cDovL2pzc2NqZ3B0Lmp4d3JkLmdvdi5jbi8/dXJsPS92aWV3L3dvcmtpbmdVbml0L3dvcmtpbmdVbml0Lmh0bWw 这串代码能够爬取勘察单位企业的详细信息。 import requests import time import csv f open(勘察单位公司信息.csv,w,encodingutf-8,newline) csv_writer …

linux的“>”和“>>”

在Linux中&#xff0c;>和>>都是用于文件重定向的操作符&#xff0c;它们用于将命令的输出发送到文件中。 > 用于创建一个新文件或覆盖现有文件的内容。当你执行一个如 command > file.txt 的命令时&#xff0c;如果 file.txt 文件存在&#xff0c;它的内容将被…

云原生:10分钟了解一下Kubernetes架构

Kubernetes&#xff0c;作为当今容器编排技术的事实标准&#xff0c;以其强大的功能和灵活的架构设计&#xff0c;在全球范围内得到了广泛的应用和认可。本文将深入简出地探讨Kubernetes的核心架构&#xff0c;帮助大家了解Kubernetes&#xff0c;为今后的高效的学习打下良好的…

Java高级阶段面试题库(Redis数据库、MQ消息队列、kafka、SpringBoot + SpringCloud、MySQL、JVMJUC、其它)

文章目录 1. Redis数据库篇(忽略)1.1 简单介绍一下redis1.2 单线程的redis为什么读写速度快?1.3 redis为什么是单线程的?1.4 redis服务器的的内存是多大?1.5 为什么Redis的操作是原子性的&#xff0c;怎么保证原子性的&#xff1f;1.6 你还用过其他的缓存吗&#xff1f;这些…

【AI写作】未来科技趋势:揭秘DreamFusion的革新力量

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

windows 11系统下打开docker 提示 docker engine stopped

windows 11系统下打开docker 提示 docker engine stopped 参考链接:https://zhuanlan.zhihu.com/p/663821762 装好了docker for windows以后,点开发现界面中心一直提示docker engine stopped,按照很多方法都不行,后面再知乎的一个专栏里面找到了解决方法 总结来说就是检查几…

「JavaEE」线程状态

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 线程状态 &#x1f349;start 和 run 的区别&#x1f349;终止线程&#x1f349;join & 阻塞状态&#x1f349;线程六大状态 &…