C++修炼之路之list--C++中的双向循环链表

目录

前言

一:正式之前先回顾数据结构中的双向循环链表

二:list的简介

三:STL中list常用接口函数的介绍及使用

1.构造函数接口

2.list迭代器 +范围for

3.数据的修改接口函数 

4.list容量操作函数 

5.list的迭代器失效

6.演示代码和测试用例链接

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 

前言

list简单来说就是数据结构中的双向循环链表,作为链表中的顶级结构,双向循环链表的任意位置插入删除数据效率高,而且不用像单链表那样分情况来讨论插入删除的情况,在C++中经过封装变为了常用的list,接下来我们就将介绍它

一:正式之前先回顾数据结构中的双向循环链表

对于双向循环链表的结构与使用可以参考本篇文章

https://blog.csdn.net/Miwll/article/details/136593441?spm=1001.2014.3001.5501

了解双向循环链表的结构,方便模拟实现list

二:list的简介

对于list在官方文档中的介绍为

https://cplusplus.com/reference/list/list/?kw=list

1.list是可以在常熟时间范围内在任意位置进行插入和删除的容器,并且支持前后双向迭代遍历数据

2.对比与其他的容器,list是不支持任意位置的随机访问的,必须从已知位置开始往后遍历寻找

三:STL中list常用接口函数的介绍及使用

1.构造函数接口

 对于构造常规的就是这几种,只需多使用便没问题

list<int> lt1;//无参构造
for (auto e : lt1)
{cout << e << " ";
}
cout << endl;list<int> lt2(10,2);//n个val来构造
for (auto e : lt2)
{cout << e << " ";
}
cout << endl;list<int> lt3(lt2);//拷贝构造
for (auto e : lt3)
{cout << e << " ";
}
cout << endl;list<int>lt4(lt3.begin(), lt3.end());//用一段迭代器来构造
for (auto e : lt4)
{cout << e << " ";
}
cout << endl;

2.list迭代器 +范围for

对于此处的迭代器我们可以理解为一个指针,指向list中的某个节点 

常常的有普通迭代器和const对象用的const迭代器,正向反向迭代器

对于list中的迭代器是比较复杂的,在模拟实现中会详细介绍的 

list<int> lt2(10, 2);//n个val来构造
list<int>::iterator it = lt2.begin();//迭代器
while (it != lt2.end())
{cout << *it << " ";++it;
}
cout << endl;for (auto e : lt2)
{cout << e << " ";
}
cout << endl;list<int>::reverse_iterator rit = lt2.rbegin();//反向迭代器
while (rit != lt2.rend())
{cout << *rit << " ";++rit;
}
cout << endl;

3.数据的修改接口函数 

对于insert和erase操作使用的是迭代器位置来插入和删除,剩余的操作便是常见的

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.push_front(10);//前插10
for (auto e : lt1)
{cout << e << " ";
}
cout << endl;lt1.insert(lt1.begin(),10);//头插10
for (auto e : lt1)
{cout << e << " ";
}
cout << endl;lt1.erase(lt1.begin());//头删
for (auto e : lt1)
{cout << e << " ";
}
cout << endl;
lt1.clear();//清空数据

4.list容量操作函数 

对于list是不需要添加resize和reserve这下扩容接口函数 ,是直接就可以创建节点来操作的

cout << lt2.size() << endl;
cout << lt2.empty() << endl;

 对于剩下的接口函数大家可以参考文档自行解决

https://cplusplus.com/reference/list/list/?kw=list

5.list的迭代器失效

迭代器失效指的是迭代器指向的节点无效,即该节点被删除了,因为list的底层结构为带头循环双向链表,在进行插入操作时是不会导致list的迭代器失效的,只有在删除时才会失效,失效的是指向被删除节点的迭代器,其他迭代器不会受影响,所以在删除操作时要接收返回值

6.演示代码和测试用例连接

https://gitee.com/lin-ciyu/cplusplus/blob/master/STL_list/STL_list/Test.cpp

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

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

相关文章

独立样本t检验——python完整代码(直接运行就行)

#!/usr/bin/env python # -*- coding: utf-8 -*- # Author : 三十二画生JH # Contact : fjhstudent163.com # Software: PyCharm # Time : 2024/4/21 21:49 # Site : 网址 # File : t_test.py # Version : # ---功能描述 """ 对实验数据做独立样本&am…

Linux系统维护:增加空闲内存的大小,以便进程有足够的基础内存(空闲内存)来运行

目录 一、问题 二、解决思路 &#xff08;一&#xff09;问题分析 &#xff08;二&#xff09;思路 1. 清理缓存 2. 结束不必要的进程 3. 优化应用程序和服务 4. 增加物理内存 5、注意事项 三、实际处理 &#xff08;一&#xff09;结束不必要的程序 &#xff08;二…

4.21java聊天室项目小结

基本完成了用户的登录注册功能&#xff0c;可以实现用户账号登录和邮箱登录功能&#xff0c;忘记密码通过邮箱发送验证码找回&#xff0c;注册账号功能&#xff0c;并传递给客户端更新数据库的表内容 注册功能&#xff1a; 注册成功后密码进行MD5加密并通过服务器保存到数据库…

【FFmpeg】视频与图片互相转换 ( 视频与 JPG 静态图片互相转换 | 视频与 GIF 动态图片互相转换 )

文章目录 一、视频与 JPG 静态图片互相转换1、视频转静态图片2、视频转多张静态图片3、多张静态图片转视频 二、视频与 GIF 动态图片互相转换1、视频转成 GIF 动态图片2、 GIF 动态图片转成视频 一、视频与 JPG 静态图片互相转换 1、视频转静态图片 执行 ffmpeg -i input.mp4 …

node和go的列表转树形, 执行速度测试对比

保证数据一致性&#xff0c;先生成4000条json数据到本地&#xff0c;然后分别读取文本执行处理 node代码 node是用midway框架 forNum1:number 0forNum2:number 0//执行测试async index(){// 生成菜单列表// const menuList await this.generateMenuList([], 4000);const men…

2024年腾讯云免费服务器最新申请入口链接

腾讯云免费服务器申请入口 txybk.com/go/free 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云百科txybk.com分享2024年最新腾讯云免费服务器申请入口、限制…

【数值计算方法】4 / 数值积分

一、理解插值 二、几种理解方式&#xff1a; 1、对插值函数进行积分得到&#xff1b; 2、使用另一个函数近似&#xff1b;&#xff08;三角函数、指数函数都是可以的...) 3、使用拉格朗日插值&#xff1b;----代数精度法&#xff08;权和为1&#xff09; 三、

深度神经网络(DNN)

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个深度神经网络&#xff08;DNN&#xff09;模型程序,最后打印5个条件分别的影响力。 示例 在深度神经网络&#xf…

【深度学习】Dropout、DropPath

一、Dropout 1. 概念 Dropout 在训练阶段会让当前层每个神经元以drop_prob&#xff08; 0 ≤ drop_prob ≤ 1 0\leq\text{drop\_prob}\leq1 0≤drop_prob≤1&#xff09;的概率失活并停止工作&#xff0c;效果如下图。 在测试阶段不会进行Dropout。由于不同批次、不同样本的神…

open Gauss 数据库-06 openGauss数据库安全指导手册5.0.0

发文章是为了证明自己真的掌握了一个知识&#xff0c;同时给他人带来帮助&#xff0c;如有问题&#xff0c;欢迎指正&#xff0c;祝大家万事胜意&#xff01; 目录 前言 openGauss数据库安全指导 1 用户权限控制 1.1 实验介绍 1.1.1 关于本实验 1.1.2 实验目的 1.2 用户…

初识ansible变量及实例配置

目录 1、为什么要使用变量 2、变量分类 3、 变量详解 3.1 vars,vars_files , group_vars 3.1 .1 vars 剧本中定义变量 3.1.2 vars_file 将变量存放到一个文件中&#xff0c;并在剧本中引用 3.1.3 group_vars 创建一个变量文件给某个组使用 实例1-根据不同的主机…

如何在PostgreSQL中使用pg_stat_statements插件进行SQL性能统计和分析?

文章目录 一、启用pg_stat_statements插件二、查看统计信息三、定期重置统计信息四、注意事项 PostgreSQL中的pg_stat_statements是一个强大的插件&#xff0c;用于追踪执行时间最长的SQL语句。通过它&#xff0c;我们可以获取有关SQL语句执行频率、总执行时间、平均执行时间等…