list(一)

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。

支持++ -- 但是不支持+和-

 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。

list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。

链表的主流访问方式就是迭代器

list构造  

1) 空容器构造函数(默认构造函数)

构造一个没有元素的空容器。

(2) 填充构造函数

构造一个包含 n 个元素的容器。每个元素都是 val 的副本。

(3) 范围构造函数

构造一个容器,其中包含与范围 [first,last] 一样多的元素,每个元素都按相同的顺序从该区域中的相应元素构造。

(4) 复制构造函数

以相同的顺序构造一个容器,其中包含 x 中每个元素的副本。

int main()
{std::list<int> first;                   //空构造           std::list<int> second(4, 100);                  //4个值为100的构造   std::list<int> third(second.begin(), second.end()); //范围构造std::list<int> fourth(third);                      //拷贝构造int myints[] = { 16,2,77,29 };std::list<int> fifth(myints, myints + sizeof(myints) / sizeof(int));//也可以使用其他容器进行范围构造std::cout << "The contents of fifth are: ";for (std::list<int>::iterator it = fifth.begin(); it != fifth.end(); it++)std::cout << *it << ' ';std::cout <<endl;return 0;
}
void list1()
{list<int>l1 = { 1,2,3,4,5,6 };list<int>::iterator it = l1.begin();while(it != l1.end()){cout << *it << " ";it++;}cout << endl;}

list迭代器

【注意】
1. begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
2. rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动

list的begin()指向头结点的下一个结点 也就是第一个有效元素的结点  end()指向头节点 也就是最后有效元素的下一个结点   rbegin()指向头结点   rend()指向头节点的下一个结点

list的成员函数empty是检测链表是否为空 并且返回布尔值  若为空 返回1 若不为空 返回0

返回链表容器中的元素数

front 和back 分别返回链表的第一个有效元素 和最后一个有效元素  有const和非const两个版本

list::push_front (const vallue_type & val)   list ::push_back(const value_type& val)

分别对链表进行头插 和尾插

list::pop_front ()   list ::pop_back()

分别对链表进行头删和尾删

(1)通过在指定位置插入单个元素

  (2)   通过在指定的位置插入 n个相同的val元素

(3)通过在指定的位置 范围插入一段内容

(1)在指定位置删除单个元素

(2)在指定的范围内删除所有元素

迭代器失效即迭代器所指向的节点的无效,即该节
点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代
器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。

list无法使用alogrithm库 中的sort进行排序 

void list1()
{list<int>l1 = { 1,2,3,4,5,6 };list<int>::iterator it = l1.begin();while(it != l1.end()){cout << *it << " ";it++;}cout << endl;sort(l1.begin(),l1.end());
}

原因是sort底层是快排 要使用随机迭代器 但是list是双向迭代器

那么链表如何排序呢

在链表的成员函数中存在专门为链表排序的sort成员函数

void list1()
{list<int>l1 = { 1,2,3,4,5,6 ,1,3,4};list<int>::iterator it = l1.begin();while(it != l1.end()){cout << *it << " ";it++;}cout << endl;//sort(l1.begin(),l1.end());l1.sort();list<int>::iterator it1 = l1.begin();while (it1 != l1.end()){cout << *it1 << " ";it1++;}
}

这是默认升序 如果想要降序那么就要传仿函数作为参数进入

void list1()
{list<int>l1 = { 1,2,3,4,5,6 ,1,3,4};list<int>::iterator it = l1.begin();while(it != l1.end()){cout << *it << " ";it++;}cout << endl;//sort(l1.begin(),l1.end());l1.sort();list<int>::iterator it1 = l1.begin();while (it1 != l1.end()){cout << *it1 << " ";it1++;}cout << endl;//greater<int>gt;l1.sort(greater<int>());for (auto e:l1){cout << e << " ";}cout << endl;
}

在现在的链表中是存在重复的数据的 如果想要去重该如何

有专门的去重成员函数unique

void list1()
{list<int>l1 = { 1,2,3,4,5,6 ,1,3,4};list<int>::iterator it = l1.begin();while(it != l1.end()){cout << *it << " ";it++;}cout << endl;//sort(l1.begin(),l1.end());l1.sort();list<int>::iterator it1 = l1.begin();while (it1 != l1.end()){cout << *it1 << " ";it1++;}cout << endl;//greater<int>gt;l1.sort(greater<int>());for (auto e:l1){cout << e << " ";}cout << endl;l1.unique();for (auto e : l1){cout << e << " ";}cout << endl;
}

但是list.sort排序的效率相较于快速排序的sort的效率还是非常低的 这点需要注意

拼接(转移)

接合

第一个版本 (1) 将 x 的所有元素传输到容器中。
第二个版本 (2) 仅将 i 指向的元素从 x 传输到容器中。
第三个版本 (3) 将范围 [first,last] 从 x 传输到容器中

void list2()
{std::list<int> mylist1, mylist2;std::list<int>::iterator it;// set some initial values:for (int i = 1; i <= 4; ++i)mylist1.push_back(i);      // mylist1: 1 2 3 4for (int i = 1; i <= 3; ++i)mylist2.push_back(i * 10);   // mylist2: 10 20 30it = mylist1.begin();++it;                         // points to 2mylist1.splice(it, mylist2); // mylist1: 1 10 20 30 2 3 4for (auto e:mylist1){cout << e << " ";}cout << endl;
}

这里使用的是第一个版本 将lsit容器x的全部元素插入 到 mylist1的pos位置  且此时链表二中被转移的内容是不会在存在在链表二的 相当于是转移

链表中不存在find 所以想要使用find需要使用算法库中的find

第一个参数和第二个参数确定查找的范围 第三个元素是要查找的元素

void list3()
{list<int> mylist1;for (int i = 1; i <= 4; i++)mylist1.push_back(i);auto it = find(mylist1.begin(),mylist1.end(),3);mylist1.splice(mylist1.begin() , mylist1,it);for (auto e : mylist1){cout << e << " ";}cout << endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

3 种自然语言处理(NLP)技术:RNN、Transformers、BERT

自然语言处理 (NLP) 是人工智能的一个领域&#xff0c;旨在使机器能够理解文本数据。NLP 研究由来已久&#xff0c;但直到最近&#xff0c;随着大数据和更高计算处理能力的引入&#xff0c;它才变得更加突出。 随着 NLP 领域的规模越来越大&#xff0c;许多研究人员都试图提高…

大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

python | x-y 网格切片

写在前面 通常&#xff0c; 我们处理的毕竟完善的nc产品&#xff0c;一般呈现未timexlatxlon的维度&#xff0c;且lon和lat都是规则的网格&#xff0c;我们可以方便的使用xarray.sel()选择合适的区域进行切片。但是&#xff0c;部分nc产品比如卫星轨道或者模式输出的数据&…

二、编译原理-词法分析

一、词法分析器的作用 1、词法分析器的作用 读入字符流&#xff0c;组成词素&#xff0c;输出词法单元序列 过滤空白、换行、制表符、注释等 将词素添加到符号表中&#xff0c;以便编译的各个阶段取用 2、词法单元、模式、词素 &#xff08;1&#xff09;词法单元 (token…

NLP开端:Tokenizer-文本向量化

Tokenizer 问题背景 An was a algorithm engineer 如上所示&#xff0c;在自然语言处理任务中&#xff0c;通常输入处理的数据是原始文本。但是算法模型自能处理数值类型&#xff0c;因此需要找到一种方法&#xff0c;将原始的文本数据转换为数值类型的数据。这就是分词器所…

Java 方法重写(难)

目录 1&#xff0e;A类和B类都写一个相同的方法&#xff0c;先用static&#xff0c;两边都是一样的&#xff1a; 2&#xff0e;A类和B类都去掉static&#xff0c;出现了两个圆圈的符号&#xff0c;代表重写&#xff1a; 3&#xff0e;总结 4&#xff0e;为什么需要重写&…

thinkPHP 8.0.4 安装

windows 上安装最新版 thinkPHP8.0.4 下载phpStudy V8.1&#xff1a;小皮面板安装Composer2.x&#xff0c;Composer是PHP的一个依赖管理工具&#xff0c;主要功能包括依赖管理、版本控制、自动加载、扩展开发以及集成其他工具。安装 php8.0.2 4. 网站-管理-compose&#xff0c…

204页PPT金税四期监管要求与最新政策及风险防范-培训课件

读者朋友大家好&#xff0c;最近有会员朋友咨询晓雯&#xff0c;需要《204页PPT金税四期监管要求与最新政策及风险防范-培训课件&#xff08;经典》资料&#xff0c;欢迎大家下载学习。 金税四期稽查的重点包括以下方面&#xff1a; 企业发票&#xff1a;关注资金流、发票流、…

前后端独立部署的企业级私有化文档管理系统丨无忧·企业文档

大家好&#xff0c;我是软件部长&#xff0c;今天给大家介绍一款企业级在线知识库项目-JVS的无忧企业文档。 JVS提供低代码、物联网、规则引擎、智能BI、逻辑引擎、无忧企业文档&#xff08;在线协同&#xff09;、无忧企业计划、无忧企业邮筒等平台&#xff0c;欢迎关注微信公…

vscode连接不上远程服务器

删除缓存.vscode 然后再删除.ssh

Vue3快熟

Vue3快速上手 1. Vue3简介1.1. 【性能的提升】1.2.【 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 CompositionAPI】Options…

【C语言】常见的C语言概念

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 什么是C语言2.C语言的历史3. 编译器的选择VS20223.1 编译和链接3.2 编译器的对比3.3 VS2022的优缺点 4.VS项目和源文件、头文件介绍5. 第一个C语言程序6. main函数7. printf和库函数8. 关键字介绍9. 字符和ASCII编…

react hooks--useReducer

概述 很多人看到useReducer的第一反应应该是redux的某个替代品&#xff0c;其实并不是 ◼ useReducer仅仅是useState的一种替代方案&#xff1a;  在某些场景下&#xff0c;如果state的处理逻辑比较复杂&#xff0c;我们可以通过useReducer来对其进行拆分&#xff1b; 或…

gma 2.0.13 (2024.09.16) 更新日志

安装 gma 2.0.13 pip install gma2.0.13网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码&#xff1a;1pc8 注意&#xff1a;此版本没有Linux版&#xff01; 编译gma的Linux虚拟机没有时间修复&#xff0c;本期Linux版…

Angular17+leaflet集成天地图组件

Angular17leaflet集成天地图组件 例图 需要的包 "asymmetrik/ngx-leaflet": "^17.0.0","types/leaflet": "^1.9.12","leaflet": "^1.9.4",去天地图网站获取一个token https://www.tianditu.gov.cn/ 创建Angul…

8、创建一般资产负债科目

定义解释 在前台创建资产负债类科目。定义资产负债类会计科目。 在 SAP 中,会计科目的定义分为两层&#xff1a;科目表层和公司代码层。 比如&#xff1a;一个集团企业可以定义一套会计科目表&#xff0c;但是下面的每个公司代码&#xff0c;从中选择哪些科目&#xff0c;这…

透明LED模块的应用场景

随着科技的不断进步和市场需求的增长&#xff0c;透明LED显示屏的应用越来越广泛&#xff0c;成为了众多领域中的创新亮点。透明LED模块凭借其高通透率、轻薄设计以及与环境的完美融合&#xff0c;正逐步替代传统显示方式&#xff0c;为现代化的展示和广告提供了全新的解决方案…

PicoQuant公司:探索铜铟镓硒(CIGS)太阳能电池技术,引领绿色能源革新

铜铟镓硒&#xff08;‌CIGS&#xff09;‌薄膜太阳能电池具有生产成本低、污染小、不衰退、弱光性能好等显著特点&#xff0c;光电转换效率居各种薄膜太阳电池之首&#xff0c;接近于晶体硅太阳电池&#xff0c;而成本只是它的三分之一&#xff0c;被称为下一代非常有前途的新…

window批处理脚本:将本地的三个文件通过SCP传输到Linux设备上

文件名send_file.bat&#xff1a; echo off setlocal:: 提示用户输入远程IP地址 set /p remoteIpAddressplease input IP::: 定义本地文件名 set "localFile1111" set "localFile2222" set "localFile3333":: 获取本地文件的完整路径 set "…

项目与产品的生命周期

在项目管理领域有两个关键概念&#xff0c;即项目生命周期和产品生命周期。它们是理解项目管理过程中的关键要素。 项目生命周期是一个项目从概念到完成所经过的所有阶段。所有项目都可分成若干阶段&#xff0c;且所有项目无论大小&#xff0c;都有一个类似的生命周期结构。阶…