list(链表)容器(二)

一、list 插入和删除

函数原型:

push_back(elem);//在容器尾部加入一个元素
pop_back();//删除容器中最后一个元素
push_front(elem);//在容器开头插入一个元素
pop_front();//从容器开头移除第一个元素
insert(pos,elem);//在pos位置插elem元素的拷贝,返回新数据的位置。
insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。
insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。
clear();//移除容器的所有数据
erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
erase(pos);//删除pos位置的数据,返回下一个数据的位置。
remove(elem);//删除容器中所有与elem值匹配的元素。

代码示例:

#include<iostream>
using namespace std;
#include<list>void printList(const list<int>& L)
{for (list<int>::const_iterator it = L.begin(); it != L.end(); it++){cout << (*it) << " ";}cout << endl;
}void test()
{list<int>L;//尾插L.push_back(10);L.push_back(20);L.push_back(30);//头插L.push_front(100);L.push_front(200);L.push_front(300);//300 200 100 10 20 30printList(L);//尾删	300 200 100 10 20L.pop_back();printList(L);//头删	200 100 10 20L.pop_front();printList(L);//insert插入	200 1000 100 10 20list<int>::iterator it = L.begin();L.insert(++it,1000);printList(L);//删除	200 100 10 20it = L.begin();L.erase(++it);printList(L);//移除L.push_back(10000);L.push_back(10000);L.push_back(10000);L.push_back(10000);printList(L);L.remove(10000);//删除所有printList(L);//清空L.clear();printList(L);
}int main()
{test();return 0;
}

总结:

尾插 --- push_back        尾删 --- pop_back

头插 --- push_front        头删 --- pop_front

插入 --- insert                 删除 --- erase

移除 --- remove              清空 --- clear  

二、list 数据存取

函数原型:

front(); //返回第一个元素。
back(); //返回最后一个元素。

代码示例:

#include<iostream>
using namespace std;
#include<list>void test()
{list<int>L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);//L1[0]	不可以用[]访问list容器中的元素//L1.at(0) 不可以用at访问list容器中的元素//原因是list本质为链表,不适用连续线性空间存储数据,迭代器也是不支持随机访问的cout << "第一个元素为:" << L1.front() << endl;cout << "最后一个元素为:" << L1.back() << endl;//验证迭代器是不支持随机访问的list<int>::iterator it = L1.begin();it++;//it--,支持双向,但写成it=it+1则出错,不支持随机访问
}int main()
{test();return 0;
}

总结:

list容器中不可以通过[]或者at方式访问数据

返回第一个元素 --- front

返回最后一个元素 --- back

三、list 反转和排序

函数原型:

reverse(); //反转链表
sort(); //链表排序

代码示例:

#include<iostream>
using namespace std;
#include<list>
#include<algorithm>void printList(const list<int>& L)
{for (list<int>::const_iterator it = L.begin(); it != L.end(); it++){cout << (*it) << " ";}cout << endl;
}void test01()
{//反转链表list<int>L1;L1.push_back(20);L1.push_back(10);L1.push_back(50);L1.push_back(40);L1.push_back(30);cout << "反转前:" << endl;printList(L1);//反转L1.reverse();cout << "反转后:" << endl;printList(L1);
}bool myCompare(int v1,int v2)
{//降序 就让第一个数 > 第二个数return v1 > v2;
}//排序链表
void test02()
{list<int>L1;L1.push_back(20);L1.push_back(10);L1.push_back(50);L1.push_back(40);L1.push_back(30);//排序cout << "排序前:" << endl;printList(L1);//所有不支持随机访问迭代器的容器,不可以用标准算法// 不支持随机迭代器访问的容器,内部会提供一些对应算法//sort(L1.begin(), L1.end());L1.sort();//默认排序规则 从小到大 升序cout << "排序后:" << endl;printList(L1);L1.sort(myCompare);printList(L1);
}int main()
{//test01();test02();return 0;
}

总结:

反转 --- reverse

排序 --- sort (成员函数)

四、排序案例

案例描述:将Person自定义数据类型进行排序,Person中属性有姓名、年龄、身高

排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序

代码示例:

#include<iostream>
using namespace std;
#include<list>
#include<string>//list容器 排序案例
class Person
{
public:Person(string name, int age, int height){this->m_Name = name;this->m_Age = age;this->m_Height = height;}string m_Name;//姓名int m_Age; //年龄int m_Height;//身高	
};//指定排序规则
bool comparePerson(Person& p1, Person& p2)
{//按照年龄 升序if (p1.m_Age == p2.m_Age){//年龄相同 按照身高降序return p1.m_Height > p2.m_Height;}else{return p1.m_Age < p2.m_Age;}
}void test()
{//创建容器list<Person>L;//准备数据Person p1("刘备", 35, 175);Person p2("曹操", 45, 180);Person p3("孙权", 40, 170);Person p4("赵云", 25, 190);Person p5("张飞", 35, 160);Person p6("关羽", 35, 200);//插入数据L.push_back(p1);L.push_back(p2);L.push_back(p3);L.push_back(p4);L.push_back(p5);L.push_back(p6);for (list<Person49>::iterator it = L.begin(); it != L.end(); it++){cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << " 身高:" << (*it).m_Height << endl;}//排序cout << "----------------------------" << endl;cout << "排序后:" << endl;L.sort(comparePerson);for (list<Person>::iterator it = L.begin(); it != L.end(); it++){cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << " 身高:" << (*it).m_Height << endl;}
}int main()
{test();return 0;
}

总结:

对于自定义数据类型,必须要指定排序规则,否则编译器不知道如何进行排序

高级排序只是在排序规则上再进行一次逻辑规则制定,并不复杂

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

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

相关文章

Rhino.Inside.Revit根据直线创建剖面视图

Hello大家好&#xff01;我是九哥~ 今天简单分享一个小节点&#xff0c;根据Revit线构件的Location Line创建Revit剖面视图&#xff0c;主要用于快速创建线管、风道、墙等构件的详图视图。 效果如下&#xff1a; Rhino.Inside.Revit根据直线创建剖面视图 这次这个节点&#xff…

python中raise_for_status方法的作用

文章目录 说明示例1:基本使用示例2:多种异常说明 raise_for_status() 方法在 Python 的 requests 库中用于在发送 HTTP 请求后检查响应的状态码。如果响应的状态码表示请求未成功(即状态码不是 2xx),则该方法会抛出一个 HTTPError 异常。这允许你以一种更结构化的方式来处…

【C语言】字符串

C语言用字符数组存放字符串&#xff0c;字符数组中的各元素依次存放字符串的各字符 一维字符数组&#xff1a;存放一个字符串&#xff08;每个数组元素存放一个字符&#xff09;二维字符数组&#xff1a;存放多个一维数组&#xff08;字符串&#xff09;&#xff1b;二维数组的…

Python - 深度学习系列31 - ollama的搭建与使用

说明 做这个的主要目的是为了搭建Langchain的本地环境&#xff0c;使用LangChain让LLM具备调用自定义函数的功能。 内容 1 安装server 以下将ollama的安装方式&#xff0c;以及使用做一个简单的说明(记录&#xff09;。之前对这个工具没有了解&#xff0c;只是从快速实践的…

Linux速览(2)——环境基础开发工具篇(其一)

本章我们来介绍一些linux的常用工具 目录 一. Linux 软件包管理器 yum 1.什么是软件包? 2. 查看软件包 3. 如何安装软件 4. 如何卸载软件 5.yum补充 6. 关于 rzsz 二. Linux编辑器-vim使用 1. vim的基本概念 2. vim的基本操作 3. vim正常模式命令集 4. vim末行模式…

2013年认证杯SPSSPRO杯数学建模C题(第一阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…

AUTOSAR-OS上层需求总结

本文是《Requirements on Operating System》这篇官方文档的学习笔记&#xff0c;主要记录了一些AUTOSAR对操作系统(OS)相关的需求准则。 1 RTOS相关要求&#xff08;Real-Time Operating System&#xff09; 1.1 [SRS_Os_00097] 操作系统&#xff08;OS&#xff09;的API需要…

深度解析:国内主流音视频产品的核心功能与市场表现

前言 当前音视频开发领域呈现出多样化竞争态势&#xff0c;其中声网&#xff08;Agora&#xff09;、即构&#xff08;ZEGO&#xff09;等云通讯企业占据了市场的主导地位。随着技术的持续进步和用户需求的日益多样化&#xff0c;选择音视频服务提供商的标准也越来越个性化&am…

unity学习(74)——服务器Dispose异常

1.返回的1 2 11是怪物初始化&#xff0c;源代码中也没有 2. 3.客户端中的网络连接初始化如下&#xff1a; 4.不是因为超时&#xff0c;设置10s为超时期限后&#xff0c;客户端和服务器有时依然会报错&#xff01; 5.我感觉就是update中发包给弄坏的&#xff01; 6.不在“帧”…

Python版【植物大战僵尸 +源码】

文章目录 写在前面&#xff1a;功能实现环境要求怎么玩个性化定义项目演示&#xff1a;源码分享Map地图:Menubar.py主菜单 主函数&#xff1a;项目开源地址 写在前面&#xff1a; 今天给大家推荐一个Gtihub开源项目&#xff1a;PythonPlantsVsZombies&#xff0c;翻译成中就是…

【云开发笔记No.18】说说腾讯的TKE

在云原生开发领域中&#xff0c;TKE&#xff08;Tencent Kubernetes Engine&#xff09;是一个重要的组成部分。TKE是腾讯云提供的一种托管的容器管理服务&#xff0c;它基于开源的Kubernetes系统&#xff0c;旨在简化容器的部署、管理和扩展&#xff0c;同时提供高性能、可靠性…

web 技术中前端和后端交互过程

1、客户端服务器交互过程 客户端:上网过程中,负责浏览资源的电脑,叫客户端服务器:在因特网中,负责存放和对外提供资源的电脑叫服务器 服务器的本质: 就是一台电脑,只不过相比个人电脑它的性能高很多,个人电脑中可以通过安装浏览器的形式,访问服务器对外提供的各种资源。 个人…

【JavaEE初阶系列】——常见的锁策略

目录 &#x1f6a9;乐观锁和悲观锁 &#x1f6a9;读写锁和普通互斥锁 &#x1f6a9;轻量级锁和重量级锁 &#x1f6a9;自旋锁和挂起等待锁 &#x1f6a9;公平锁和非公平锁 &#x1f6a9;可重入锁和不可重入锁 &#x1f6a9;关于synchronized的锁策略以及自适应 接下来讲解的锁策…

transformers微调模型后使用pieline调用无法预测列表文本

初学transformers框架 使用trainer简单训练一个文本分类模型三个epoch后 使用piepline调用model 和tokenizer后 发现 传入列表文本后 输出就变得不正常了&#xff0c;为么子哇 如下图

git 代码管理仓库/安装部署

系统环境准备 cat /etc/reshat-release #查看系统版本 uname -r #查看版本内核 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config #关闭selinux systemctl stop firewalld #关闭防火墙 Git安装部署 rpm -qa | grep git …

macbook pro 2018 T2 芯片安装 archlinux 双系统

文章目录 [toc]配置无线网和分区修改时区安装内核和驱动自动生成 fstab 文件配置 pacman切换到安装好的系统设置时区配置 pacman 国内源安装 gui安装 GRUB 引导建立引导 增加内核模块配置开机自启修改 root 用户密码创建普通用户配置 sudo 重启进入新系统配置 wlan 自动连接 wi…

整理-2023年信息安全报告汇总

《2023年度网络安全威胁报告》&#xff1a;该报告详细分析了2023年全球范围内的网络安全威胁情况&#xff0c;包括恶意软件、钓鱼攻击、勒索软件等。报告还指出了不同行业和地区面临的特定威胁&#xff0c;以及相应的防御策略。《2023年云安全趋势报告》&#xff1a;随着云计算…

语义分割——Dark Zurich数据集

一、重要性及意义 首先&#xff0c;Dark Zurich为语义分割提供了大量真实且多样化的图像数据。该数据集包含了在夜间、黄昏和白天拍摄的大量图像&#xff0c;涵盖了不同光照条件和场景下的图像变化。这些图像数据不仅丰富了语义分割任务的数据集&#xff0c;也为模型提供了更全…

C++之STL整理(5)之string 用法(创建、赋值、增删查改)整理

C之STL整理&#xff08;5&#xff09;之string 用法&#xff08;创建、赋值、增删查改&#xff09;整理 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的string用法整理 C之…

acwing1114

#include<bits/stdc.h> using namespace std; const int N10; int n,k; char g[N][N]; //记录每列放没放过 bool st[N]; int res0; //x表示当前枚举到了哪一行&#xff0c;cnt记录放了几颗棋 void dfs(int x,int cnt){ if(cntk){ res; return ; …