当前位置: 首页 > news >正文

笔记(五)——list容器的基础理论知识

list容器是一个双向链表容器,可以高效地进行插入删除元素,但是不能随机存取元素(不支持at()和[]操作符)。

一、list容器的对象构造方法

list对象采用模板类的默认构造形式

例如list<T> lst;

#include<iostream>
#include<list>
using namespace std;
int main()
{int arr[]={0,1,2,3,4};list<int> lstInt;list<float> lstFloat;list<string> listString;list<int>::iterator t1;list<int>::iterator t2;lstInt.assign(arr,arr+5);lstInt.push_back(5);//在容器尾部插入元素lstInt.push_back(5);//在容器尾部删除元素lstInt.pop_back();lstInt.push_front(0);//在容器头部插入元素lstInt.push_front(0);lstInt.pop_front();//在容器头部删除元素t1=lstInt.begin(); t2=lstInt.end(); //    正确写法 for(;t1!=t2;t1++){cout<<*t1;}cout<<endl;//    错误写法 
//    for(;t1<t2;t1++)
//    {
//        cout<<*t1;
//    }
//    cout<<endl;//输出:0012345 return 0;
}

list对象的带参构造方式

  1. list<T> lst(beg,end);该构造函数将区间[beg,end)中的元素拷贝给本身。

beg,end是数组元素的地址。

  1. list<T> list(n,elem);该构造函数将n个elem拷贝给本身。

  1. list<T> lst1(lst2);拷贝构造函数

#include<iostream>
#include<list>
using namespace std;
int main()
{int arr[]={0,1,2,3,4};list<int>::iterator t;//1、list对象带参数构造 
//正确写法 list<int> lst1(arr,arr+5);                              //建立一个存放int的list容器,初始为0,1,2,3,4 list<int> lst2(lst1.begin(),lst1.end());           //建立一个存放int的list容器,初始为0,1,2,3,4 list<int> lst3(3,100);       list<int> lst4(lst1); for(t=lst1.begin();t!=lst1.end();t++){cout<<*t<<" ";}cout<<endl;for(t=lst2.begin();t!=lst2.end();t++){cout<<*t<<" ";}cout<<endl;for(t=lst3.begin();t!=lst3.end();t++){cout<<*t<<" ";}cout<<endl;for(t=lst4.begin();t!=lst4.end();t++){cout<<*t<<" ";}cout<<endl;//输出
//0 1 2 3 4
//0 1 2 3 4
//100 100 100
//0 1 2 3 4 return 0;
} 

二、list与迭代器

list容器的迭代器是双向迭代器。

  1. list.begin();返回容器第一个元素的迭代器。

  1. list.end();返回容器最后一个元素之后的迭代器。

  1. list.rbegin();返回容器倒数第一个元素的迭代器。

  1. list.rend();返回容器倒数最后一个元素后面的迭代器。

#include<iostream>
#include<list>
using namespace std;
int main()
{int arr[]={0,1,2,3,4};list<int> lstInt;list<int>::iterator t1;list<int>::iterator t2;lstInt.assign(arr,arr+5);t1=lstInt.begin(); t2=lstInt.end(); //    正确写法 for(;t1!=t2;t1++){cout<<*t1;}cout<<endl;//    错误写法 
//    for(;t1<t2;t1++)
//    {
//        cout<<*t1;
//    }
//    cout<<endl;//输出:01234return 0;
}

三、list容器的赋值

1、list.assign(beg,end); 将区间[beg,end)中的元素拷贝给本身。

2、list.assign(n,elem);将n个elem拷贝给本身。

3、list& operator=(const list &vec);重载等号操作符。

4、list.swap(vec);将vec与本身的元素交换。

#include<iostream>
#include<list>
using namespace std;
int main()
{int arr[]={0,1,2,3,4};list<int>::iterator t;list<int> lst1;              list<int> lst2;           list<int> lst3;       lst1.assign(arr,arr+5);lst2.assign(3,100);lst3=lst1;lst2.swap(lst1);for(t=lst1.begin();t!=lst1.end();t++){cout<<*t<<" ";}cout<<endl;for(t=lst2.begin();t!=lst2.end();t++){cout<<*t<<" ";}cout<<endl;for(t=lst2.begin();t!=lst2.end();t++){cout<<*t<<" ";}cout<<endl;
//输出:
//100 100 100
//0 1 2 3 4
//0 1 2 3 4 
return ; 
} 

四、list容器的大小

list.size();返回容器中元素的个数

list.empty();判断容器是否为空

list.resize(num);重新指定容器长度,若比之前的长度长,超出部分填充默认值,若比之前的长度短,删除超出部分元素。

list.resize(num,elem);重新指定容器长度,若比之前的长度长,超出部分填充指定值,若比之前的长度短,删除超出部分元素。

五、list容器元素的插入

list.insert(pos,elem);在pos位置插入一个elem元素,返回新元素的位置(迭代器类型)

list.insert(pos,n, elem);在pos位置插入n个elem元素,无返回值

list.insert(pos,beg, end);在pos位置插入[beg,end)区间的数据,无返回值。

六、list容器的删除

1、list.clear();移除容器的所有数据

2、list.erase(beg,end);删除[beg,end)区间的数据,返回下一个数据的位置。

3、list.erase(pos);删除pos位置的元素,返回下一个数据的位置。

4、list.remove(elem);删除容器里所有值为elem的元素。

#include<iostream>
#include<list>
using namespace std;
int main()
{int arr[]={0,1,2,3,4};list<int> lstInt;list<int>::iterator t1;list<int>::iterator t2;list<int>::iterator t3;lstInt.assign(arr,arr+5);t1=lstInt.begin(); for(;t1!=lstInt.end();t1++){cout<<*t1;}cout<<endl;//01234lstInt.clear();lstInt.push_front(5);lstInt.push_front(6);lstInt.push_front(7);lstInt.push_front(8);for(t1=lstInt.begin();t1!=lstInt.end();t1++){cout<<*t1;}cout<<endl;//8765t2=++lstInt.begin();t3=++lstInt.begin();++t3;++t3;lstInt.erase(t2,t3);for(t1=lstInt.begin();t1!=lstInt.end();t1++){cout<<*t1;}cout<<endl;//85lstInt.push_front(5);lstInt.push_front(6);lstInt.push_front(7);lstInt.push_front(8);lstInt.remove(5);for(t1=lstInt.begin();t1!=lstInt.end();t1++){cout<<*t1;}cout<<endl;//8768//输出
//01234
//8765
//85
//8768return 0;
}

七、其他

  1. lst.reverse();反转列表

#include<iostream>
#include<list>
using namespace std;
int main()
{int arr[]={0,1,2,3,4};list<int> lstInt;list<int>::iterator t1;list<int>::iterator t2;lstInt.assign(arr,arr+5);lstInt.reverse();t1=lstInt.begin(); t2=lstInt.end(); for(;t1!=t2;t1++){cout<<*t1;}cout<<endl;
//    输出:43210 return 0;
}

2、删除结点导致迭代器失效

#include<iostream>
#include<list>
using namespace std;
int main()
{int arr[]={0,1,2,3,4,4,4,4,4,4,4,5,5,6,6};list<int> lstInt;list<int>::iterator t1;list<int>::iterator t2;lstInt.assign(arr,arr+15);t1=lstInt.begin(); t2=lstInt.end(); //因为list容器使用不连续分配的内存,并且它的erase方法会返回下一个有效的迭代器,所有遍历删除结点可以有以下方式: 
//方法1 for(;t1!=t2;){if(*t1==4){t1=lstInt.erase(t1);}else{t1++;}}//方法2for(;t1!=t2;t1++){if(*t1==4){lstInt.erase(t1);}}t1=lstInt.begin(); t2=lstInt.end(); for(;t1!=t2;t1++){cout<<*t1<<" ";}cout<<endl;
//输出:0 1 2 3 5 5 6 6 return 0;
}

相关文章:

笔记(五)——list容器的基础理论知识

list容器是一个双向链表容器&#xff0c;可以高效地进行插入删除元素&#xff0c;但是不能随机存取元素&#xff08;不支持at()和[]操作符&#xff09;。一、list容器的对象构造方法list对象采用模板类的默认构造形式例如list<T> lst&#xff1b;#include<iostream>…...

浅谈网络中接口幂等性设计问题

所谓幂等性设计&#xff0c;就是说&#xff0c;一次和多次请求某一个资源应该具有同样的副作用。用数学的语言来表达就是&#xff1a;f(x) f(f(x))。 在数学里&#xff0c;幂等有两种主要的定义。 在某二元运算下&#xff0c;幂等元素是指被自己重复运算&#xff08;或对于函数…...

《C Primer Plus》第13章复习题与编程练习

《C Primer Plus》第13章复习题与编程练习复习题1. 下面的程序有什么问题&#xff1f;2. 下面的程序完成什么任务&#xff1f;&#xff08;假设在命令行环境中运行&#xff09;3. 假设程序中有下列语句&#xff1a;4. 编写一个程序&#xff0c;不接受任何命令行参数或接受一个命…...

计算机SCI论文应该怎么作图? - 易智编译EaseEditing

计算机SCI论文&#xff0c;作图时要注意以下几个方面的问题&#xff1a; 1.图片的格式要tiff或者eps&#xff1b; 2.文件大小不能超过10M&#xff1b; 3.长和宽也给出了具体要求&#xff1b; 4.色彩模式要RGB或者灰度图&#xff1b; 5.文中的文字字体和大小&#xff1b; …...

【一】kubernetes集群部署

一、docker环境搭建 1、移除以前docker相关包 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine2、配置yam源 sudo yum install -y yum-utilssudo yum-config-manager --ad…...

Docker安装Redis

一、拉取镜像 命令&#xff1a;&#xff1a;docker pull <镜像名称>:<版本号> docker pull redis 二&#xff1a;Docker挂载配置文件 挂载&#xff1a;即将宿主的文件和容器内部目录相关联&#xff0c;相互绑定&#xff0c;在宿主机内修改文件的话也随之修改容…...

在shell中执行一条可执行程序(./a.out) 系统执行的过程

目录 系统调度过程 用户空间角度&#xff1a; 内核角度 1、调用fork创建一个新进程 2、使用_fo_fork创建新进程 3、父进程调用wake_up_new_task尝试唤醒新进程 4、CPU选择一个合适的进程来运行&#xff1b; 5、运行新进程 6、实现负载均衡 系统调度过程 分析在命令行…...

【ArcGIS Pro二次开发】(10):属性表字段(field)的修改

在ArcGIS Pro中&#xff0c;经常会遇到用字段计算器对要素的属性表进行计算。下面以一个例子演示如何在ArcGIS Pro SDK二次开发中实现。 一、要实现的功能 如上图所示的要素图层&#xff0c;要实现如下功能&#xff1a; 当字段【市级行政区】的值为【泉州市】时&#xff0c;将…...

数据结构与算法—散列表

目录 散列表 散列函数 散列冲突解决 1、开放寻址法 1.1 线性探测 1.2 二次探测 1.3 双重散列 2、链表法 使用场景 单词查找 散列表与链表的结合使用LRU 散列表总结 散列表实例 散列表 Word 单词拼写功能&#xff0c;如何实现的&#xff1f;散列表&#xff08;Has…...

计算机网络笔记、面试八股(一)—— TCP/IP网络模型

本章目录1. TCP/IP网络模型1.1 应用层1.1.1 应用层作用1.1.2 应用层有哪些常用协议1.2 运输层1.2.1 TCP与UDP的区别1.2.2 分块传输1.2.3 端口1.3 网络层1.3.1 IP报文1.3.2 IP地址1.3.3 网络号和主机号的获得1.3.4 子网掩码的获得1.3.5 路由1.3.6 IP地址与MAC地址的区别1.3.7 AR…...

Servlet笔记(18):国际化

三个概念 国际化&#xff1a; 意义着一个网站提供不同版本的翻译成访问者的语言或国籍的内容。本地化&#xff1a; 意味着向网站添加资源&#xff0c;以使其适应特定的地理或文化区域。区域设置&#xff1a; 针对某个国家的某个地区的设置。 Servlet可以根据请求者的区域设置…...

kibana搭建(windowslinux)

1.说明 搭建kibana方便查询es库&#xff0c;本文分别对windows和linux版本进行安装&#xff0c;因为es集群版本是7.4.1&#xff0c;所以配套的kibana也是选择相同版本 2.下载 https://artifacts.elastic.co/downloads/kibana/kibana-7.4.1-windows-x86_64.zip https://artifact…...

(pytorch进阶之路)Informer

论文&#xff1a;Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting (AAAI’21 Best Paper) 看了一下以前的论文学习学习&#xff0c;我也是重应用吧&#xff0c;所以代码部分会比较多&#xff0c;理论部分就一笔带过吧 论文作者也很良心的…...

关键词聚类和凸现分析-实战1——亚急性甲状腺炎的

审稿人问题第8页第26行-请指出#是什么意思&#xff0c;并解释为什么亚急性甲状腺炎在这里被列为#8。我认为在搜索亚急性甲状腺炎相关文章时&#xff0c;关键词共现分析应该提供关键词共现的数据。这些结果的实际用途是什么?亚急性甲状腺炎是一种较为罕见但重要的甲状腺疾病&am…...

二叉树——二叉搜索树中的众数

二叉搜索树中的众数 链接 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定…...

安装_配置参数解读_集群安装配置_启动选举_搭建启停脚本---大数据之ZooKeeper工作笔记004

这里首先下载zookeeper安装包,可以看到官网地址 找到download 点击下载 找到老一点的,我们找3.5.7 in the archive 点击 然后这里找到3.5.7这一个 然后下载这个-bin.tar.gz这个...

RTMP的工作原理及优缺点

一.什么是RTMP&#xff1f;RTMP&#xff08;Real-Time Messaging Protocol&#xff0c;实时消息传输协议&#xff09;是一种用于低延迟、实时音视频和数据传输的双向互联网通信协议&#xff0c;由Macromedia&#xff08;后被Adobe收购&#xff09;开发。RTMP的工作原理是&#…...

【数据结构与算法】——第八章:排序

文章目录1、基本概念1.1 什么是排序1.2 排序算法的稳定性1.3 排序算法的分类1.4 内排序的方法2、插入排序2.1 直接插入排序2.2 直接插入排序2.3 希尔排序3、交换排序3.1 冒泡排序3.2 快速排序4、选择排序4.1 简单选择排序4.2 树形选择排序4.3 堆排序4.4 二路归并排序5、基数排序…...

在linux中web服务器的搭建与配置

以下涉及到的linux命令大全查阅 https://www.runoob.com/linux/linux-command-manual.htmlvim命令查阅 https://www.runoob.com/linux/linux-vim.htmlscp命令https://www.runoob.com/linux/linux-comm-scp.html首先要有一个请求的服务地址用ssh 进入到linux系统中ssh 请求的服务…...

《Python机器学习》基础代码2

&#x1f442; 逝年 - 夏小虎 - 单曲 - 网易云音乐 目录 &#x1f44a;Matplotlib综合应用&#xff1a;空气质量监测数据的图形化展示 &#x1f33c;1&#xff0c;AQI时序变化特点 &#x1f33c;2&#xff0c;AQI分布特征 相关性分析 &#x1f33c;3&#xff0c;优化图形…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...