STL值list

 list容器

头文件:#include<list>

- list是一个双向链表容器,可高效地进行插入删除元素

- list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符

注:list使用迭代器访问数据时可以一步一步走自增自减(即it++)不允许跨太多步去访问元素

        list容器是可以进行遍历的,即进行数据访问时不会进行删除操作

list头尾的添加移除操作

- list.push back(elem); //在容器尾部加入一个元素

- list.pop _back(); //删除容器中最后一个元素

- list.push front(elem); //在容器开头插入一个元素

- list.pop_front(); //从容器开头移除第一个元素

list的数据存取

 list.front();//返回第一个元素。

list.back(); //返回最后一个元素。

list与迭代器

- list 容器的迭代器是“双向迭代器”:双向迭代器从两个方向读写容器。除了提供前向迭代器的全部操作之外,双向迭代器还提供前置和后置的自减运算。

- list.begin(); //返回容器中第一个元素的选代器

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

- list.rbegin(); //返回容器中倒数第一个元素的选代器

- list.rend(); //返回容器中倒数最后一个元素的后面的选代器

示例1:list与正向迭代器

#include<iostream>
#include<list>
using namespace std;
int main() {list<int> lst;lst.push_back(10);lst.push_front(20);list<int>::iterator it;for (it = lst.begin(); it != lst.end(); it++) {cout << *it << ' ';}cout << endl;int a = lst.front();cout << "front:" << a << endl;int b = lst.back();cout << "back:" << b << endl;//修改容器末尾和首部的值lst.front() = 100;lst.back() = 200;a = lst.front();cout << "front:" << a << endl;b = lst.back();cout << "back:" << b << endl;
}

示例2:list与反向迭代器

#include<iostream>
#include<list>
using namespace std;
int main() {list<int> lst;lst.push_back(10);lst.push_front(20);list<int>::reverse_iterator it1;for (it1 = lst.rbegin(); it1 != lst.rend(); it1++) {cout << *it1 << ' ';}cout << endl;}

list对象的带参数构造

- list(n,elem); //构造函数将n个elem拷贝给本身

- list(beg,end); //构造函数将[beg,end)区间中的元素拷贝给本身

- list(const list &lst); //拷贝构造函数。

#include<iostream>
#include<list>
using namespace std;
int main() {list<int>::iterator it;list<int> lst(3, 5);for (it = lst.begin(); it != lst.end(); it++) {cout << *it << ' ';}cout << endl;list<int> lst2(lst.begin(),lst.end());//list<int> lst2(lst.begin(), lst.begin()+5);错误for (it = lst2.begin(); it != lst2.end(); it++) {cout << *it << ' ';}cout << endl;int a[] = { 1,2,3,4,5 };list<int> lst3(a, a + 5);for (it = lst3.begin(); it != lst3.end(); it++) {cout << *it << ' ';}cout << endl;list<int> lst4(lst);for (it = lst4.begin(); it != lst4.end(); it++) {cout << *it << ' ';}cout << endl;
}

list的赋值

- list.assign(beg,end); //将[beg,end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。

- list.assign(n,elem); //将n个elem拷贝赋值给本身

- list& operator=(const list &lst); //重载等号操作符

- list.swap(lst); // 将lst与本身的元素互换。

示例:

#include<iostream>
#include<list>
using namespace std;
int main() {list<int> lst1,lst2;list<int> lst3 = { 1,2,3,4,5 };list<int>::iterator it = lst3.end();list<int>::iterator it2;lst1.assign(lst3.begin(), it);for (it2 = lst1.begin(); it2 != lst1.end(); it2++) {cout << *it2 << ' ';}cout << endl;cout << endl;lst2.assign(3, 5);for (it2 = lst2.begin(); it2 != lst2.end(); it2++) {cout << *it2 << ' ';}cout << endl;cout << endl;lst2 = lst1;for (it2 = lst1.begin(); it2 != lst1.end(); it2++) {cout << *it2 << ' ';}cout << endl;cout << endl;lst1.swap(lst2);for (it2 = lst1.begin(); it2 != lst1.end(); it2++) {cout << *it2 << ' ';}cout << endl;for (it2 = lst2.begin(); it2 != lst2.end(); it2++) {cout << *it2 << ' ';}cout << endl;}

list的大小

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

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

- list.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

- list.resize(num,elem); //重新指定容器的长度为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进行数据的插入时是没有空间的释放和位置的移动,因此不会出现迭代器失效的情况

list的删除

- list.clear(); /X移除容器的所有数据

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

- list.erase(pos); //删除pos位置的数据,返回下一个数据的位置。

- lst.remove(elem); //删除容器中所有与elem值匹配的元素。

list的反序排列

- lst.reverse(); //反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元素

Iist迭代器失效

- 删除结点导致迭代器失效

删除即是将相应数据位置的元素地址释放掉,即返还给内部系统,在某些编译器中,该被释放的地址是可以进行访问并有明确复制(系统内部赋值),该系统地址是没有访问权限的,俗称野指针

示例:

#include<iostream>
#include<list>
using namespace std;
int main() {list<int> lst = { 1,2,1,4,5 };list<int>::iterator it;for (it = lst.begin(); it != lst.end();) {if (*it == 1) {it = lst.erase(it);}else it++;}for (it = lst.begin(); it != lst.end(); it++) cout << *it<<' ';
}

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

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

相关文章

分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

【苍穹外卖】总结

1 pom 依赖 1.1 MyBatis Spring 用于简化 MyBatis 与 Spring Boot 的集成&#xff0c;提供了对 MyBatis 框架的自动配置支持&#xff0c;简化了数据访问层的开发 1.2 Lombok Lombok 是一个 Java 库&#xff0c;能够通过注解自动生成常见的代码&#xff08;如 getter、setter、…

看Threejs好玩示例,学习创新与技术(三)

本文接上篇内容&#xff0c;继续挖掘应用ThreeJS的一些创新算法。 1、获得鼠标移动对应的地理位置 这个算法如果放在几年前&#xff0c;那肯定会难倒一帮人的。因为是三维投影涉及矩阵变换及求逆&#xff0c;而且还是投影模式下的。在Project Texture这个示例中&#xff0c;作…

Apache-wed服务器环境的安装

一。安装httpd并且开启httpd yum install httpd systemctl start httpd 二。关闭防火墙 systemctl stop firewall 三。常规配置wed服务 mkdir /www vim index.html&#xff08;里面写入自己的内容&#xff09; chmod 755 index.htm chmod 755 /www vim /etc/httpd/co…

从冯唐的成事心法 看SAP协助企业战略落地到信息化

冯唐的《成事心法》是一部结合古代智慧和现代管理理念的著作&#xff0c;通过分析和解读古代名臣张居正的管理方法&#xff0c;提出了一套实用的成事之道。这本书的结构循序渐进&#xff0c;讲解了如何在工作和生活中实现目标、解决问题。以下是《成事心法》的主要结构和内容概…

【Node.js】初识微服务

概述 Node.js 的微服务架构是一种通过将应用程序分解为独立的、松耦合的小服务的方式进行系统设计。 每个微服务负责处理一个特定的业务功能&#xff0c;并且这些服务可以独立开发、部署、扩展和管理&#xff0c;并且可以通讯。 它的核心思想就是解耦。 微服务和微前端是类…

FastText 和 Faiss 的初探了解

概览 大模型目前已经是如火如荼的程度&#xff0c;各个大厂都有推出面向大众的基础大模型&#xff0c;同时诸多行业也有在训练专有大模型&#xff0c;而大模型的发展由来却是经过多年从文本检索生成、深度学习、自然语言处理&#xff0c;在Transformer架构出来后&#xff0c;才…

前端基础知识+算法(一)

文章目录 算法二分查找条件注意方式基本原理左闭右闭正向写法 左闭右开正向写法 前端基础知识定时器及清除盒子垂直水平居中的方式垂直水平1.flex布局2.grid布局3.定位对于块级元素 解决高度塌陷的方式1.给父元素一个固定的高度2.给父元素添加属性 overflow: hidden;3.在子元素…

ip映射域名,一般用于mysql和redis的固定映射,方便快捷打包

举个例子 192.168.3.101mysql映射到mysql.smartlink.com 192.168.3.101redis redis.smartlink.com 要将IP地址映射到域名&#xff0c;可以通过几种方式实现&#xff0c;包括修改本地主机文件&#xff08;仅适用于本地开发环境&#xff09;、设置DNS解析&#xff08;适用于生产环…

IDEA-调用Restful接口

告别Swagger3/Apifox/Postman Swagger3&#xff08;丝袜哥&#xff09; 地址&#xff1a;REST API Documentation Tool | Swagger UI简介&#xff1a;在java代码里面增加注解生成接口文档 在代码里面增加注解 RestController RequestMapping("api/v1/user") Api(ta…

Java外卖小程序管理系统

技术架构&#xff1a; springboot ssm mysql redis 有需要该项目的小伙伴可以添加我Q&#xff1a;598748873&#xff0c;备注&#xff1a;CSDN 功能描述&#xff1a; 商品管理&#xff1a;新增商品、所有商品 菜单管理&#xff1a;菜单管理、菜单分类 订单管理&#x…

<<编码>> 第 12 章 二进制加法器--8位加法器 示例电路

8 位加法器内部结构 info::操作说明 鼠标单击逻辑输入切换 0|1 状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch12-08-8-bit-adder-internal.txt 8 位加法器 info::操作说…

只要不逾期就行了吗?如何守护好你的“第二张身份证“!

在这个时代&#xff0c;信用记录已远远超越了金融交易的范畴&#xff0c;它如同一根无形的纽带&#xff0c;将我们生活的各个领域紧密相连。近闻有人甚至在步入婚姻殿堂前&#xff0c;也要细致核查对方的信用状况&#xff0c;毕竟&#xff0c;这关乎到共同生活的基石与未来幸福…

影刀RPA实战:自动化同步商品库存至各大电商平台(二)

在当今的电商世界中&#xff0c;多平台运营已成为常态。商家需要在多个电商平台上维护商品库存的一致性&#xff0c;以确保顾客体验的流畅性和库存管理的高效性。运营人员每天面临的问题&#xff0c;就是把公司的商品库存数据&#xff0c;间断性的同步到电商平台上&#xff0c;…

VMamba: Visual State Space Model 论文总结

题目&#xff1a;VMamba: Visual State Space Model&#xff08;视觉状态空间模型&#xff09; 论文&#xff1a;[2401.10166] VMamba: Visual State Space Model (arxiv.org) 源码&#xff1a;https://arxiv.org/pdf/2401.10166 (github.com) 目录 一、摘要 二、引言 三、方…

基于单片机的风机故障检测装置的设计与实现(论文+源码)

1 系统总体设计方案 通过对风机故障检测装置的设计与实现的需求、可行性进行分析&#xff0c;本设计风机故障检测装置的设计与实现的系统总体架构设计如图2-1所示&#xff0c;系统风机故障检测装置采用STM32F103单片机作为控制器&#xff0c;并通过DS18B20温度传感器、ACS712电…

【AI大模型】ChatGPT模型原理介绍(下)

目录 &#x1f354; GPT-3介绍 1.1 GPT-3模型架构 1.2 GPT-3训练核心思想 1.3 GPT-3数据集 1.4 GPT-3模型的特点 1.5 GPT-3模型总结 &#x1f354; ChatGPT介绍 2.1 ChatGPT原理 2.2 什么是强化学习 2.3 ChatGPT强化学习步骤 2.4 监督调优模型 2.5 训练奖励模型 2.…

[全网首发]怎么让国行版iPhone使用苹果Apple Intelligence

全文共分为两个部分&#xff1a;第一让苹果手机接入AI&#xff0c;第二是让苹果手机接入ChatGPT 4o功能。 一、国行版iPhone开通 Apple Intelligence教程 打破限制&#xff1a;让国行版苹果手机也能接入AI 此次发布会上&#xff0c;虽然国行 iPhone16 系列不支持 GPT-4o&…

爆改YOLOv8|使用MobileNetV4替换yolov8的Backbone

1&#xff0c;本文介绍 MobileNetV4 是最新的 MobileNet 系列模型&#xff0c;专为移动设备优化。它引入了通用反转瓶颈&#xff08;UIB&#xff09;和 Mobile MQA 注意力机制&#xff0c;提升了推理速度和效率。通过改进的神经网络架构搜索&#xff08;NAS&#xff09;和蒸馏…

什么是数据库回表,又该如何避免

目录 一. 回表的概念二. 回表的影响三. 解决方案1. 使用覆盖索引2. 合理选择索引列3. 避免选择不必要的列4. 分析和优化查询5. 定期更新统计信息6. 避免使用SELECT DISTINCT或GROUP BY7. 使用适当的数据库设计 数据库中的“回表”是指在查询操作中&#xff0c;当数据库需要访问…