笔记(五)——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对象的带参构造方式
list<T> lst(beg,end);该构造函数将区间[beg,end)中的元素拷贝给本身。
beg,end是数组元素的地址。
list<T> list(n,elem);该构造函数将n个elem拷贝给本身。
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容器的迭代器是双向迭代器。
list.begin();返回容器第一个元素的迭代器。
list.end();返回容器最后一个元素之后的迭代器。
list.rbegin();返回容器倒数第一个元素的迭代器。
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;
}
七、其他
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容器是一个双向链表容器,可以高效地进行插入删除元素,但是不能随机存取元素(不支持at()和[]操作符)。一、list容器的对象构造方法list对象采用模板类的默认构造形式例如list<T> lst;#include<iostream>…...
浅谈网络中接口幂等性设计问题
所谓幂等性设计,就是说,一次和多次请求某一个资源应该具有同样的副作用。用数学的语言来表达就是:f(x) f(f(x))。 在数学里,幂等有两种主要的定义。 在某二元运算下,幂等元素是指被自己重复运算(或对于函数…...
《C Primer Plus》第13章复习题与编程练习
《C Primer Plus》第13章复习题与编程练习复习题1. 下面的程序有什么问题?2. 下面的程序完成什么任务?(假设在命令行环境中运行)3. 假设程序中有下列语句:4. 编写一个程序,不接受任何命令行参数或接受一个命…...
计算机SCI论文应该怎么作图? - 易智编译EaseEditing
计算机SCI论文,作图时要注意以下几个方面的问题: 1.图片的格式要tiff或者eps; 2.文件大小不能超过10M; 3.长和宽也给出了具体要求; 4.色彩模式要RGB或者灰度图; 5.文中的文字字体和大小; …...
【一】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
一、拉取镜像 命令::docker pull <镜像名称>:<版本号> docker pull redis 二:Docker挂载配置文件 挂载:即将宿主的文件和容器内部目录相关联,相互绑定,在宿主机内修改文件的话也随之修改容…...
在shell中执行一条可执行程序(./a.out) 系统执行的过程
目录 系统调度过程 用户空间角度: 内核角度 1、调用fork创建一个新进程 2、使用_fo_fork创建新进程 3、父进程调用wake_up_new_task尝试唤醒新进程 4、CPU选择一个合适的进程来运行; 5、运行新进程 6、实现负载均衡 系统调度过程 分析在命令行…...
【ArcGIS Pro二次开发】(10):属性表字段(field)的修改
在ArcGIS Pro中,经常会遇到用字段计算器对要素的属性表进行计算。下面以一个例子演示如何在ArcGIS Pro SDK二次开发中实现。 一、要实现的功能 如上图所示的要素图层,要实现如下功能: 当字段【市级行政区】的值为【泉州市】时,将…...
数据结构与算法—散列表
目录 散列表 散列函数 散列冲突解决 1、开放寻址法 1.1 线性探测 1.2 二次探测 1.3 双重散列 2、链表法 使用场景 单词查找 散列表与链表的结合使用LRU 散列表总结 散列表实例 散列表 Word 单词拼写功能,如何实现的?散列表(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):国际化
三个概念 国际化: 意义着一个网站提供不同版本的翻译成访问者的语言或国籍的内容。本地化: 意味着向网站添加资源,以使其适应特定的地理或文化区域。区域设置: 针对某个国家的某个地区的设置。 Servlet可以根据请求者的区域设置…...
kibana搭建(windowslinux)
1.说明 搭建kibana方便查询es库,本文分别对windows和linux版本进行安装,因为es集群版本是7.4.1,所以配套的kibana也是选择相同版本 2.下载 https://artifacts.elastic.co/downloads/kibana/kibana-7.4.1-windows-x86_64.zip https://artifact…...
(pytorch进阶之路)Informer
论文:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting (AAAI’21 Best Paper) 看了一下以前的论文学习学习,我也是重应用吧,所以代码部分会比较多,理论部分就一笔带过吧 论文作者也很良心的…...
关键词聚类和凸现分析-实战1——亚急性甲状腺炎的
审稿人问题第8页第26行-请指出#是什么意思,并解释为什么亚急性甲状腺炎在这里被列为#8。我认为在搜索亚急性甲状腺炎相关文章时,关键词共现分析应该提供关键词共现的数据。这些结果的实际用途是什么?亚急性甲状腺炎是一种较为罕见但重要的甲状腺疾病&am…...
二叉树——二叉搜索树中的众数
二叉搜索树中的众数 链接 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定…...
安装_配置参数解读_集群安装配置_启动选举_搭建启停脚本---大数据之ZooKeeper工作笔记004
这里首先下载zookeeper安装包,可以看到官网地址 找到download 点击下载 找到老一点的,我们找3.5.7 in the archive 点击 然后这里找到3.5.7这一个 然后下载这个-bin.tar.gz这个...
RTMP的工作原理及优缺点
一.什么是RTMP?RTMP(Real-Time Messaging Protocol,实时消息传输协议)是一种用于低延迟、实时音视频和数据传输的双向互联网通信协议,由Macromedia(后被Adobe收购)开发。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
👂 逝年 - 夏小虎 - 单曲 - 网易云音乐 目录 👊Matplotlib综合应用:空气质量监测数据的图形化展示 🌼1,AQI时序变化特点 🌼2,AQI分布特征 相关性分析 🌼3,优化图形…...
如何基于MLServer构建Python机器学习服务
文章目录前言一、数据集二、训练 Scikit-learn 模型三、基于MLSever构建Scikit-learn服务四、测试模型五、训练 XGBoost 模型六、服务多个模型七、测试多个模型的准确性总结参考前言 在过去我们训练模型,往往通过编写flask代码或者容器化我们的模型并在docker中运行…...
9.1 IGMPv1实验
9.4.1 IGMPv1 实验目的 熟悉IGMPv1的应用场景掌握IGMPv1的配置方法实验拓扑 实验拓扑如图9-7所示: 图9-7:IGMPv1 实验步骤 (1)配置IP地址 MCS1的配置 MCS1的IP地址配置如图9-8所示: 图9-8:MCS1的配置 …...
软考高级系统分析师系列论文之十:论实时控制系统与企业信息系统的集成在通信业应用
软考高级系统分析师系列论文之十:论实时控制系统与企业信息系统的集成在通信业应用 一、摘要二、正文三、总结一、摘要 近年来,在应用需求的强大驱动下,我国通信业有了长足的进步。现有通信行业中的许多企业单位,如电信公司或移动集团,其信息系统的主要特征之一是对线路的…...
NIO与零拷贝
目录 一、零拷贝的基本介绍 二、传统IO数据读写的劣势 三、mmap优化 四、sendFile优化 五、 mmap 和 sendFile 的区别 六、零拷贝实战 6.1 传统IO 6.2 NIO中的零拷贝 6.3 运行结果 一、零拷贝的基本介绍 零拷贝是网络编程的关键,很多性能优化都离不开。 在…...
【PAT甲级题解记录】1151 LCA in a Binary Tree (30 分)
【PAT甲级题解记录】1151 LCA in a Binary Tree (30 分) 前言 Problem:1151 LCA in a Binary Tree (30 分) Tags:树的遍历 并查集 LCA Difficulty:剧情模式 想流点汗 想流点血 死而无憾 Address:1151 LCA in a Binary Tree (30 分…...
Android 获取手机语言环境 区分简体和繁体,香港,澳门,台湾繁体
安卓和IOS 系统语言都是准守:ISO 639 ISO 代码表IOS:plus.os.language ios正常,安卓下简体和繁体语言,都是zh安卓获取系统语言方法:Locale.getDefault().language手机切换到繁体(台湾,香港&…...
一文搞懂Python时间序列
Python时间序列1. datetime模块1.1 datetime对象1.2 字符串和datatime的相互转换2. 时间序列基础3. 重采样及频率转换4. 时间序列可视化5. 窗口函数5.1 移动窗口函数5.2 指数加权函数5.3 二元移动窗口函数时间序列(Time Series)是一种重要的结构化数据形…...
GeoServer发布数据进阶
GeoServer发布数据进阶 GeoServer介绍 GeoServer是用于共享地理空间数据的开源服务器。 它专为交互操作性而设计,使用开放标准发布来自任何主要空间数据源的数据。 GeoServer实现了行业标准的 OGC 协议,例如网络要素服务 (WFS)…...
Docker离线部署
Docker离线部署 目录 1、需求说明 2、下载docker安装包 3、上传docker安装包 4、解压docker安装包 5、解压的docker文件夹全部移动至/usr/bin目录 6、将docker注册为系统服务 7、重启生效 8、设置开机自启 9、查看docker版本信息 1、需求说明 大部份公司为了服务安全…...
《数据库系统概论》学习笔记——第七章 数据库设计
教材为数据库系统概论第五版(王珊) 这一章概念比较多。最重点就是7.4节。 7.1 数据库设计概述 数据库设计定义: 数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构&#x…...
自己做网站需要买什么/游戏推广论坛
一、Android Studio使用夜神模拟器进行调试开发: 1、首先打开Android Studio工具,然后再运行夜神模拟器 2、打开夜神模拟器bin运行目录(如cd D:\Nox\bin) 3、cmd执行命令:nox_adb.exe connect 127.0.0.1:62001&…...
如何自己做网站/app开发公司排行榜
Java 类路径Java 类路径告诉 java 解释器和 javac 编译器去哪里找它们要执行或导入的类。类(您可能注意到的那些 *.class 文件)可以存储在目录或 jar 文件中,或者存储在两者的组合中,但是只有在它们位于类路径中的某个地方时&…...
做网站是怎么收费的是按点击率/专门看广告的网站
ruby正则表达式在线编辑器:rubular 一般规则: /a/匹配字符a。 /\?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), , *. .匹配任意字符,例如/a./匹配ab和ac /[ab]c/匹配ac和bc,[]之间代表范围。例如&#x…...
wordpress文章采集插件/广告投放网站平台
在使用word2vec对文本进行分析时能产生一个bin文件,可以用ANSJ调用该文件得到相近词,等同于替换 ./distance vectors.bin命令。 代码如下: import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.FileInputSt…...
建设银行网站怎么登陆密码/全国疫情高峰感染进度
转载 :機器/深度學習: 物件偵測 Non-Maximum Suppression (NMS) 機器/深度學習: 物件偵測 Non-Maximum Suppression (NMS)基本上在影像物件偵測領域上,都是先會選出物件候選人,然後在物件候選人中判斷是不是物件,但有可能一個物件被很多候選…...
政府网站建设发展方向/win10系统优化软件哪个好
首先需要在eclipse中安装svn插件,这个网上教程很多 那么我来说下如何在将svn添加到菜单中去吧. 很简单,转载于:https://www.cnblogs.com/linwen5723/p/6478406.html...