当前位置: 首页 > news >正文

STL之list容器

list的介绍

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

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

3.vector的优点:支持随机访问,间接的就支持了排序/二分查找/堆排序等

               缺点:1.头部和中部的插入效率低,需要挪动数据

                          2.插入数据空间不够需要增容,增容需要开新空间,拷贝数据,释放旧空间

    list的优点:没有增容代价,且任意位置插入都是0(1);

              缺点:不支持随机访问,得从头开始遍历查找到后面的元素

所以list和vector是互补的存在

注意:forward_list是单向链表

list的常见函数接口

构造函数:

 

与vector类似

第一个构造空的,第二个构造4个结点,每个都是100,第四个拷贝构造函数

第三个不用记,直接使用第四个去拷贝就行

Capacity接口 :

根据前面的vector和string的学习,相信大家都很熟悉了

empty():判断是否为空

size():返回结点数

相比之下,list没有capacity(),因为它是来一个结点就开一个

 Modifiers接口:

push_front():头插

pop_front():头删 

push_back():尾插

pop_back():尾删

insert():在pos位置插入val

erase():删除pos位置的元素

swap():交换两个list中的元素

clear():清空元素,clear 会遍历链表,为每个节点调用析构函数,并释放节点所占用的内存。

resize():在这里不常用,与之前容器的resize一样

Element access接口:

返回头部和尾部元素

operations接口

splice():转移链表 

sort():排序

reverse():逆置链表

iterator接口:

重点谈迭代器

从支持操作接口的角度分迭代器类型

单向(forward_list)   双向(list)  随机(vector)

it只能++                  it能++--             it能++--也能it+=5,直接跳几个

从使用场景的角度分迭代器类型

(正向迭代器+反向迭代器)+(const修饰迭代器+普通迭代器) 

迭代器失效:

可简单的将迭代器理解成指针(后面会有讲解迭代器如何实现),迭代器失效即迭代器所指向的结点无效,即该结点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除结点的迭代器,其他迭代器不会受影响

int array[]={1,2,3,4,5};
list<int> li(array,array+sizeof(array)/sizeof(array[0));
auto it=li.begin();
while(it!=li.end())
{it=li.erase(it);it++;
}

每次删除都会导致迭代器失效(vector里面我已经详细说明)所以每次删除返回迭代器都要更新it

 简单模拟实现list

June: 这里包含我的c++和Linux及数据结构https://gitee.com/taifanshu/day2.git注意:这里面要深刻体会const迭代器的实现,如何使用模板实现传参

 


 

相关文章:

STL之list容器

list的介绍 1.list的底层是双向链表结构&#xff0c;双向链表中的每个元素在互不相关的独立结点中&#xff0c;在结点中通过指针指向前一个元素和后一个元素 2.list是可以在常数范围内在任意位置的插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代 3.vector的…...

DNS 域名解析

DNS&#xff08;Domain Name System&#xff09; 是一个将域名转换为IP地址的系统。它的主要功能是使用户能够通过易于记忆的域名访问互联网资源&#xff0c;而不是记住复杂的IP地址。DNS类似于“互联网的电话簿”&#xff0c;帮助计算机找到彼此的位置。 一、DNS的基本概念 …...

我写了一个分析 Linux 平台打开文件描述符跨进程传递的工具

Linux 系统的设计中&#xff0c;继承了 Unix “一切皆文件” (Everything is a file) 的思想&#xff0c;系统中的众多对象&#xff0c;都可以表示为文件&#xff0c;可以对它们执行文件操作&#xff0c;如 read()、write()、mmap()、ioctl()、close() 和 poll() 等。Linux 系统…...

QML图像提供器 (Image Provider)

QML 中的图像提供器是一种自定义图像加载机制&#xff0c;允许你从非文件源&#xff08;如数据库、网络或程序生成的内容&#xff09;提供图像数据。 主要类型 QQuickImageProvider - 基础图像提供器 QPixmapImageProvider - 提供 QPixmap 图像 QImageImageProvider - 提供 …...

【Java学习】通配符?

面向对象系列八&#xff1a;泛型(二) 一、通配符? 二、泛型符<> 1.泛型类里 2.泛型类外 2.1使用过程中 2.2使用最后末 三、限制 1.泛型类里的限制 2.延申处的限制 2.1extend限制上界 2.1.1返回值接 2.1.2形参传 2.2super限制下界 2.2.1形参传 2.2.2返回值…...

安卓基础(悬浮窗和摄像)

ACTION_MANAGE_OVERLAY_PERMISSION​​ 的作用就是 ​​打开系统设置的「悬浮窗权限管理页面」 Intent intent new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:" getPackageName()) ); startActivity(intent); 直接跳转目标应用的权限…...

一种实波束前视扫描雷达目标二维定位方法——论文阅读

一种实波束前视扫描雷达目标二维定位方法 1. 专利的研究目标与实际问题意义2. 专利提出的新方法、模型与公式2.1 运动平台几何建模与回波信号构建2.1.1 距离历史建模2.1.2 回波信号模型2.2 距离向运动补偿技术2.2.1 匹配滤波与距离压缩2.3 加权最小二乘目标函数2.3.1 方位向信号…...

基于springboot的金院银行厅预约系统的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;信息管理系统的实施在技术上已逐步成熟。信息管理系统是一个不断发展的新型学科&#xff0c;任何一个单位要生存要发展&#xff0c;要高效率地把内部活动有机地组织起来&#xff0c;就必须建立与自身特点相适应的…...

AVFormatContext 再分析零

随着对于AVFormatContext 各个参数的学习&#xff0c;逐渐可以从 整体架构上 再认识一下 AVFormatContext 了。 还是从解封装的第一步开始。 int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); 实际上…...

【学习心得】魔塔(ModelScope)和抱抱脸(Hugging Face)下载模型小细节

介绍常用的两种在模型社区如魔塔&#xff08;ModelScope&#xff09;和抱抱脸&#xff08;Hugging Face&#xff09;&#xff0c;下载预训练模型的方法&#xff0c;然后说明各种方法里面的小细节。 一、SDK下载 对于希望直接通过编程方式集成模型下载功能到自己的项目中的开发…...

嵌入式硬件篇---STM32 系列单片机型号命名规则

文章目录 前言一、STM32 型号命名规则二、具体型号解析1. STM32F103C8T6F103:C:8:T6:典型应用2. STM32F103RCT6F103:R:C:T6:典型应用三、命名规则扩展1. 引脚数与封装代码2. Flash 容量代码3. 温度范围代码四、快速识别技巧性能定位:F1/F4后缀差异硬件设计参考:引脚数…...

关于算法设计与分析——拆分表交换问题

题目&#xff1a; 用蛮力法设计一个算法&#xff0c;将A{a1, a2, ..., an}拆成B和C两个表&#xff0c;使A中值大于等于0的元素存入表B&#xff0c;值小于0的元素存入表C&#xff0c;要求表B和C不另外设置存储空间而利用表A的空间。 1&#xff09;问题分析 题目要求设计一个算…...

在pycharm profession 2020.3上离线安装.whl类型的包(以PySimpleGUI为例)

今天写个小代码&#xff0c;用到了PySimpleGUI。 在pycharm profession 2020.3的项目中的Terminal里运行如下代码即可安装。 python3 -m pip install --force-reinstall --extra-index-url https://PySimpleGUI.net/install PySimpleGUI 安装方法如图&#xff1a; 安装后使用…...

c++回调函数

函数指针 //函数 bool lengthCompare(const string&, const string&); //pf为指针&#xff0c;指向一个函数&#xff0c;函数的类型为&#xff1a;bool (const string&, const string&) bool (*pf)(const string&, const string&); //函数&#xff0…...

mysql主从复制搭建,并基于‌Keepalived + VIP实现高可用

以下是基于 ‌Keepalived VIP‌ 实现 MySQL 主从复制高可用的详细步骤&#xff0c;涵盖主从复制搭建与故障自动切换&#xff1a; 一、MySQL 主从复制搭建&#xff08;基础步骤回顾&#xff09; 1. ‌主库&#xff08;Master&#xff09;配置‌ 修改配置文件‌ /etc/my.cnf&…...

时间交织(TIADC)的失配误差校正处理(以4片1GSPS采样率的12bitADC交织为例讲解)

待写…有空再写&#xff0c;有需要的留言。 存在失配误差的4GSPS交织 校正完成后的4GSPS交织...

K8S自动弹性伸缩机制详解

Kubernetes (K8S) 自动弹性伸缩机制详解 Kubernetes 通过多种控制器和指标系统实现 自动弹性伸缩&#xff0c;主要包括 Pod水平伸缩&#xff08;HPA&#xff09;、垂直伸缩&#xff08;VPA&#xff09;、集群节点伸缩&#xff08;CA&#xff09; 三种方式。以下是核心机制和实…...

C++模版结构体的使用

1. convert_pointer 结构体模板 template<typename _SourceIterator, typename _DestT> struct convert_pointer {typedef typename convert_pointer<typename _SourceIterator::pointer, _DestT>::type type; };作用 这是一个递归模板&#xff0c;用于处理 _Sou…...

WebRTC 服务器之Janus架构分析

1. Webrtc三种类型通信架构 1.1 1 对 1 通信 1 对 1 通信模型设计的主要⽬标是尽量让两个终端进⾏直联&#xff0c;这样即可以节省服务器的资源&#xff0c;⼜可以提⾼ ⾳视频的服务质量。WebRTC ⾸先尝试两个终端之间是否可以通过 P2P 直接进⾏通信&#xff0c;如果⽆法直接…...

音视频开发成长之路与音视频知识总结

音视频开发曾经是一个富有挑战性和技术深度的领域。我来分享整理音视频开发的成长路径和知识体系&#xff1a; 音视频开发成长路线图 1. 基础阶段&#xff08;1-3个月&#xff09; 计算机基础&#xff1a;C/C、数据结构、操作系统音视频基础概念&#xff1a;采样率、比特率、…...

batch normalization和layer normalization区别

Normalization无非就是这样一个操作&#xff1a; 其中x是输入数据&#xff0c;维度为&#xff08;B&#xff0c;T&#xff0c;C&#xff09;&#xff0c;其中B是batchsize&#xff0c;T是序列长度&#xff0c;C是embedding维度&#xff1b;括号内是标准化操作&#xff0c;γ和…...

Android Compose 层叠布局(ZStack、Surface)源码深度剖析(14)

Android Compose 层叠布局&#xff08;ZStack、Surface&#xff09;源码深度剖析 一、引言 在 Android 应用开发领域&#xff0c;用户界面&#xff08;UI&#xff09;的设计与实现一直是至关重要的环节。随着技术的不断演进&#xff0c;Android Compose 作为一种全新的声明式…...

数据仓库方法论书籍及其阅读建议

A、关于数据仓库方法论的各书籍详细分析及汇总 1. ​​《Building the Data Warehouse (Third Edition)》 by W.H. Inmon​ 核心观点 ​企业级数据仓库&#xff08;EDW&#xff09;​​&#xff1a;自上而下的架构&#xff0c;采用第三范式&#xff08;3NF&#xff09;模型&…...

数据库 1.0

数据库就是放数据的地方 程序里面的数据就是暂时性的 要是想把数据永久性的储存 MySQL是典型的C / S架构 Client 云端 Sever 服务端 数据库服务的开启和关闭 可以在这里选择关闭开启&#xff0c;关闭之后就无法通过终端再连接mysql了 通过命令行的方式开启和关闭mysql&…...

给QCustomPlot添加一个QScrollBar滚动条、限制缩放范围、自动设置大小和右边栏垂直缩放

实现效果 实现思路 从QCustomPlot类派生一个类,进行个性化设置,在轴矩形的上边设置Margin,放一个滚动条,设置滚动条的样式 常量定义 #define NQSCRB 1000构造函数初始化 // 设置QScrollBar的样式// 顶部空--5,左侧空--6...

计算机系统结构 第二章 :缓存优化

零-1:复习cache的基础知识: 一、映像方式 直接映射 原理&#xff1a;主存被分成若干区&#xff0c;每个区大小与 Cache 相同&#xff0c;区内再分块&#xff0c;主存每个区中块的大小和 Cache 中块大小相等&#xff0c;且每个区包含的块数也与 Cache 中块数相等。主存中任意…...

软件工程实践

例一 用例文档 UC1注册 执行者 潜在会员 前置条件 潜在会员访问系统 后置条件 系统已记录注册信息 涉众利益 潜在会员——希望注册尽量简单&#xff0c;希望自己的信息不会泄露 商店——希望获得尽可能多的未来客户信息&#xff0c;特别是联系方法 基本路径 1.潜在会员请求注册…...

将Airtable导入NocoDB

将Airtable导入NocoDB 0. 前提条件1. 详细步骤 NocoDB提供了一种简化流程&#xff0c;可在几分钟内将您的Airtable数据库无缝转移到各种数据库管理系统&#xff0c;包括MySQL、Postgres和SQLite。此功能特别适合希望将Airtable数据库迁移到更强大且可扩展的数据库管理系统中的用…...

【云备份】服务端数据管理模块设计与实现

目录 一、要管理的数据 二、如何管理数据 三.数据管理类的设计 3.1.数据信息结构体的设计 3.2.数据管理类的设计 四.数据管理类实现 4.1.数据信息结构体的数据填充 4.2.数据管理类的实现 五. 源代码测试 数据管理模块&#xff1a;需要管理的数据有哪些&#xff0c;而…...

Qt开发:按钮类的介绍和使用

文章目录 一、命令按钮类 &#xff08;QPushButton&#xff09;1.1 基本功能介绍1.2 常用构造函数1.3 常用方法1.4 信号与槽使用示例1.5 开关按钮&#xff08;Checkable&#xff09;1.6 创建出菜单按钮&#xff08;Menu Button&#xff09; 二、工具按钮类 &#xff08;QToolBu…...

Clickhouse基于breakpad生成minidump文件,方便问题定位

背景 breakpad能够在程序崩溃的时候自动生成一个mini的core文件&#xff0c;能够帮助进行问题定位&#xff0c;但是clickhouse对于集成breappad的难度较大 查看github发现之前有大佬基于以前的分支有个MR&#xff0c;但是一直没有合并到社区&#xff0c;想来是有什么其他的原因…...

华为云Astro轻应用自定义连接器对接OBS云对象存储操作指南

操作难点图例(详细见下文详细操作步骤) 操作成功图例 说明:以下是通过自定义连接器创建新的OBS桶的图例 说明:以下是通过自定义连接器将数据内容嵌入创建新的OBS桶的图例 操作难点图例 说明:连接器编排需要注意的是动作选择、输入参数的设置等...

C# 运算符重载深度解析:从基础到高阶实践

运算符重载是 C# 中一项强大的特性&#xff0c;它允许开发者为用户自定义类型定义运算符的行为&#xff0c;使得代码更直观、更符合领域逻辑。本文将通过理论解析与实战示例&#xff0c;全面讲解运算符重载的实现规则、适用场景及注意事项。 一、运算符重载的核心概念 1. 什么…...

面试现场“震”情百态:HashMap扩容记

&#xff08;以下为符合要求的文章内容&#xff09; 【场景】 2024年秋招季某互联网大厂会议室 面试官&#xff1a;张工&#xff08;P8级架构师&#xff09; 求职者&#xff1a;马小帅&#xff08;双非二本应届生&#xff09; 第一轮提问&#xff08;Java基础篇&#xff09; …...

SCAU18124--N皇后问题

18124 N皇后问题 时间限制:5000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC Description 有N*N的国际象棋棋盘&#xff0c;要求在上面放N个皇后&#xff0c;要求任意两个皇后不会互杀&#xff0c;有多少种不同的放法&#xff1f; 输入格式 …...

MySQL 分库分表

对于使用 MySQL 作为数据库管理系统的应用来说&#xff0c;当数据量达到一定规模时&#xff0c;单库单表的架构会面临性能瓶颈&#xff0c;如查询缓慢、写入性能下降等问题。为了解决这些问题&#xff0c;可以使用分库分表技术。 二、为什么需要分库分表 2.1 单库单表的局限性…...

滑动窗口leetcode 904

代码&#xff1a; class Solution { public:int totalFruit(vector<int>& fruits) {int n fruits.size();unordered_map<int,int> window_type_count;int left 0;int ans 0;for(int right 0; right <n;right){while(window_type_count.size() 2 &&…...

用Maven定位和解决依赖冲突

用Maven定位和解决依赖冲突 一、依赖冲突的常见表现二、定位冲突依赖的4种方法2.1 使用Maven命令分析依赖树2.2 使用IDE可视化工具2.3 使用Maven Enforcer插件2.4 运行时分析 三、解决依赖冲突的5种方案3.1 排除特定传递依赖3.2 统一指定版本&#xff08;推荐&#xff09;3.3 使…...

八大排序之选择排序

本篇文章将带你详细了解八大基本排序中的选择排序 目录 &#xff08;一&#xff09;选择排序的时间复杂度和空间复杂度及稳定性分析 &#xff08;二&#xff09;代码实现 (三)输出结果 选择排序的基本原理是&#xff1a;每次从待排序的数组中找出最大值和最小值。具体流程是…...

SVM实战:从理论到鸢尾花数据集的分类可视化

SVM实战&#xff1a;从理论到鸢尾花数据集的分类可视化 在机器学习的广阔领域中&#xff0c;支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;作为一种经典且强大的分类算法&#xff0c;备受瞩目。它凭借独特的思想和卓越的性能&#xff0c;在模式识…...

深入解析 Stacking:集成学习的“超级英雄联盟

在机器学习的世界里&#xff0c;我们常常面临一个挑战&#xff1a;单一模型往往难以完美地解决复杂问题。就像漫威电影中的超级英雄们一样&#xff0c;每个模型都有自己的独特能力&#xff0c;但也有局限性。那么&#xff0c;如何让这些模型“联手”发挥更大的力量呢&#xff1…...

C# 编程核心:控制流与方法调用详解

在编程中&#xff0c;控制流和方法调用是构建程序逻辑的两大基石。它们决定了代码的执行顺序和模块化协作方式。本文将从基础概念出发&#xff0c;结合代码示例&#xff0c;深入解析这两部分内容。 控制流&#xff1a;程序执行的指挥棒 控制流决定了代码的执行路径&#xff0…...

PyTorch_张量基本运算

基本运算中&#xff0c;包括add, sub, mul, div, neg等函数&#xff0c;以及这些函数的带下划线的版本add_, sub_, mul_, div_, neg_, 其中带下划线的版本为修改原数据。 代码 import torch import numpy as np # 不修改原数据的计算 def test01():data torch.randint(0, 10…...

C++负载均衡远程调用学习之订阅功能与发布功能

目录 1.lars-DnsV0.1回顾 2.Lars-DnsV0.2-订阅功能的订阅模块分析 3.Lars-DnsV0.2-订阅模块的类的单例创建及方法属性初始化 4.Lars-DnsV0.2-发布功能的实现 5.Lars-DnsV0.2-发布功能的总结 6.Lars-DnsV0.2-订阅流程复习 7.Lars-DnsV0.2-订阅模块的集成 8.Lars-DnsV0.2订…...

接口测试的核心思维(基础篇)

1.为什么会进行接口测试&#xff1f; 早期发现问题&#xff0c;降低修复成本 当我们服务端已经完成&#xff0c;而前端还未进行开发的时候。我们可以通过接口测试避免前端的交互直接进行服务端的测试。 接口测试也能够更早介入项目的测试&#xff0c;降低修复成本。 提高测试…...

给文件内容加行号

题目&#xff1a; 给定一个文件&#xff0c;通过文件读写&#xff0c;给文件内容加行号。 行号形式如: 1:) xxXXXX 2:) xxxxXX 要求&#xff1a; 使用缓冲流操作。 思路分析&#xff1a; 程序定义了两个字符串变量 inputFile 和 outputFile&#xff0c;分别存储输入文件的路径…...

【计算机视觉】三维重建: MVSNet:基于深度学习的多视图立体视觉重建框架

MVSNet&#xff1a;基于深度学习的多视图立体视觉重建框架 技术架构与核心算法1. 算法流程2. 关键创新 环境配置与实战指南硬件要求安装步骤数据准备&#xff08;DTU数据集&#xff09; 实战流程1. 模型训练2. 深度图推断3. 点云生成 常见问题与解决方案1. CUDA内存不足2. 特征…...

终端与环境变量

一、我的电脑是Win10的&#xff0c;首先打开终端如下&#xff1a; 此时终端来到C:\Users\lenovo的目录下&#xff0c;可以访问该目录下的所有文件&#xff08;夹&#xff09;。另外&#xff0c;除了这个之外&#xff0c;终端还可以访问环境变量中的所有文件&#xff08;夹&…...

使用线性表实现通讯录管理

目录 &#x1f680;前言&#x1f99c;任务目标&#x1f31f;顺序表实现&#x1f40d;链表实现 &#x1f680;前言 大家好&#xff01;我是 EnigmaCoder。 本文介绍线性表的实验&#xff0c;使用顺序表和链表实现通讯录管理&#xff0c;包含初始化、插入、删除、查询、输出。 &a…...

机器学习常用评价指标

1. 指标说明 (1) AccuracyClassification&#xff08;准确率&#xff09; • 计算方式&#xff1a;accuracy_score(y_true, y_pred) • 作用&#xff1a; 衡量模型正确预测的样本比例&#xff08;包括所有类别&#xff09;。 公式&#xff1a; Accuracy TP TN TP TN FP…...