深入解析:list的学习

news/2025/9/26 15:32:21/文章来源:https://www.cnblogs.com/tlnshuju/p/19113591

深入解析:list的学习

2025-09-26 15:31  tlnshuju  阅读(0)  评论(0)    收藏  举报

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

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

3、list与forward_list非常相似,但forward_list只能朝前面迭代

4、list的缺点就是不能随机访问 ,你只能从已知位置(头节点或尾节点遍历过去去找)

list的接口较多

我们去学常见的重要接口


list的构造

构造函数(constructor)

list(size_t n,const value_type &val=value_type())            构造的list中包含n个值为val的元素

list()                                       构造空的list

list(const list& x)                       拷贝构造函数

list(inputiterator first,inputiterator last)                 用(first,last)区间中的元素构造list

list iterator的使用

这地方把迭代器暂时理解成指针,该指针指向list中的一个节点

begin+end                    返回第一个元素的迭代器+返回最后一个元素下一个位置的迭代器

rbegin+rend                  颠倒过来


list capacity

empty               检测list是否为空 ,是返回true,不是返回false

size                返回list中有效节点个数

list element access

front                     返回list的第一个节点中值的引用

back                        返回list的最后一个节点中值的引用

push_front             在list首元素前插入值为val的元素

pop_front              删除list中的第一个元素

push_back            在list尾部插入值为val的元素

pop_back              删除list中最后一个元素

insert              在指定的这个位置插入值val

erase                  删除指定位置的元素

swap                    交换两个list中的元素

clear                     清空list中的有效元素

因为要考虑迭代器失效的可能(在删除时所指向节点的消失)

#include
#include
using namespace std;
void test()
{
int array[] = { 1,2,3,4,5,6,7 };
list l(array, array + sizeof(array) / sizeof(array[0]));
auto it =l.begin();
while (it != l.end())
{
it=l.erase(it);
}
}

反向迭代器

template
class reverseiterator
{
public:
typedef typename iterator::ref   ref;
typedef typename  iterator::ptr  ptr;
typedef  reverseiterator  self;
public:
reverseiterator(iterator it)
:_it(it)
{ }
ref operator*()
{
iterator temp(_it);
--temp;
return *temp;
}
ptr operator->()
{
return &(operator*());
}
self& operator++()
{
--_it;
return *this;
}
self& operator++(int)
{
self temp(*this);
--_it;
return temp;
}
self& operator--()
{
++_it;
return *this;
}
self& operator(int)
{
self temp(*this);
++_it;
return temp;
}
bool operator!=(const self& l)const
{
return _it != l._it;
}
bool operator==(const self& l)const
{
return _it == l._it;
}
iterator _it;
};

vector                                         和                                              list的区别

1、动态顺序表,一段连续空间                                               带头节点的双向循环链表

2、支持随机访问,o(1)                                                        不支持随机访问为,o(n)

3、任意位置插入和删除效率低,需要搬移元素,                       任意位置插入删除效率高,为o(1)

时间复杂 度为O(N),插入时有可能需要增容,增容:

开辟新空 间,拷贝元素,释放旧空间,导致效率更低

4、原生态指针                                                                          对原生态指针封装

5、在插入元素时,要给所有迭代器重新赋值,                            插入不影响,删除会导致当前迭                                                                                                            代器失效

因为插入元素有可能导致扩容,导致迭代器失效,删除时,

当前迭代器要重新赋值或则失效

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

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

相关文章

CentOS将软件源修改为国内源

在使用CentOS系统时,yum(Yellowdog Updater Modified)是最常用的包管理工具,无论是安装软件、更新系统还是修复依赖,都离不开它。但CentOS默认的官方yum源服务器位于国外,国内用户在使用时常常会遇到下载速度慢、…

【C++进阶】C++11 的新特性 | lambda | 包装器 - 实践

【C++进阶】C++11 的新特性 | lambda | 包装器 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

实用指南:用Playwright实现接口自动化测试:从基础到实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

易路一站式智能招聘,开启人才管理新纪元

在全球招聘市场经历深刻变革的当下,人工智能正以前所未有的速度重塑着企业的人才获取策略。作为人力资源科技领域的领军企业,易路人力资源科技集团(以下简称“易路”)凭借其深厚的行业积累与前瞻性的AI布局,于202…

温州微网站制作电话伪类网站

目录 一.Python 进程池 multiprocessing.Pool 介绍二.Python 进程池 multiprocessing.Pool 使用三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 Python 进程池 Pool 和前面讲解的** Python 线程池** 类似,虽然使用多进程能提…

常宁市住房和城乡建设局网站官网设计模板

题意:给出三个数的gcd,lcm,求这三个数的全部的可能 思路 :设x,y,z的gcd为d,那么设xd*a,yd*b,zd*c。a,b。c肯定是互质的。那么lcmd*a*b*c,所以我们能够得到a*b*clcm/gcdans,将ans分解因数后&…

kingbase数据库SHELL端迁移工具访问及使用

SHELL端迁移工具存放位置: $KINGBASE_HOME/ClientTools/guitools/KDts/KDTS-CLI SHELL工具中使用KDTS与Web端存在差异的部分在于:迁移任务配置上,Web方式在启动脚本之后,通过网页可视化表单直接修改配置项;SHELL方…

数据质量定胜负:Apple 如何破解双语大模型性能鸿沟

在大型语言模型(LLM)向多语言能力迈进的征程中,一个被称为“多语言诅咒”(Curse of Multilinguality)的现象长期困扰着整个行业:在预训练数据中加入更多语言,有时非但不能提升所有语言的性能,反而会导致英语等…

从零开始:VirtualBox 虚拟机安装与 CentOS 7 部署 + 双网卡网络配置指南

从零开始:VirtualBox虚拟机安装与CentOS 7部署+双网卡网络配置指南 在云原生学习、测试环境搭建或多系统开发场景中,虚拟机是不可或缺的工具。VirtualBox作为一款开源免费、跨平台的虚拟机软件,支持Windows、macOS、…

微信个人号api|搭建高效微信机器人系统

微信个人号api|搭建高效微信机器人系统 在私域流量运营与智能客服领域,微信个人号API接口已成为开发者实现自动化的重要工具。接口能力全景发送语音 如需大批量微信发送同样微信内容可点击此处查看优化方式,第2大类4…

【光照】[物理模型]中的[BRDF]是什么?

【从UnityURP开始探索游戏渲染】专栏-直达双向反射分布函数 Bidirectional Reflectance Distribution Function 解释当光线从某个方向照射到一个表面时,有多少光线被反射、反射方向有哪些。BRDF大多使用一个数学公式表…

网站开发公司企业青海省公路建设总公司网站

大前端、微服务、数据库、更多精彩,尽在开发者分会场 【Apache Dubbo】 Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,是国内影响力最大、使用最广泛的开源服务框架之一,它提供了三大核心能力:面向接口的远程方法调用&…

江苏海通建设有限公司网站做下载网站用阿里云的什么产品

CleanMyMac X帮助Mac系统进行垃圾清理,清除多余的缓存、应用程序等,在提高工作效率上起了很大的作用。但是随着对软件的需求不断增加,很多人开始研究通过捷径破解正版软件,但是是否能成功呢?今天小编就为大家揭开“断网…

[fakeadmin]-(session伪造flask框架)-CTF

[fakeadmin](session伪造&flask框架) 一,打开题目,发现源码 #!/usr/bin/env python # -*- coding:utf-8 -*- from flask import Flask, session import os import randomapp = Flask(__name__) app.config[SEC…

《Linux Robust锁》

1.Robust锁Robust锁(健壮锁)是POSIX线程库提供的一种特殊互斥锁,专门设计用于处理持有锁的进程或线程意外终止的情况,核心目的是解决因锁持有者崩溃导致的死锁问题。2.使用场景多进程共享内存的时候,某个进程持有…

实用指南:Agent智能体+DeepSeek全教程:零基础到精通,一键生成可视化报表!

实用指南:Agent智能体+DeepSeek全教程:零基础到精通,一键生成可视化报表!2025-09-26 15:16 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-…

Manim实现气泡特效

本文将介绍如何使用Manim框架实现一个简单而实用的气泡特效,该特效可用于多种场景,如背景装饰、数据可视化过渡等。 1. 实现原理 气泡特效的核心在于BubbleEffect类,它继承自Manim的Animation类,通过重写关键方法来…

石家庄商标设计小黄人seo

#停止原有工程 ps -ef | grep demo | grep -v grep | awk {print $2} | xargs kill#删除原有工程 rm -rf /opt/app/demo.jar#解压压缩包指定文件,并存入指定路径 #tar -zxf 压缩包 -C 解压到的路径 压缩包中指定文件名 tar -zxf /opt/app/demo.tgz -C /opt/app .…

完整教程:决策树(Decision Tree)

完整教程:决策树(Decision Tree)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…