当前位置: 首页 > 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;优化图形…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

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

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

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...