C++学习:list

1.list的定义和结构

list的使用频率不高,在做题时几乎遇不到需要使用list的情景。list是一种双向链表容器,它是标准模板库(STL)提供的一种序列容器。list容器以节点(node的形式存储元素,并使用指针将这些节点链接在一起,形成一个链表结构。list容器结构如下:

在这里插入图片描述

list容器模板接受两个参数:
1.T:指定容器中存储的元素类型。 list<int>
2.Allocator(可选):指定用于分配内存的分配器类型,默认为std::allocator<T>
一般不用填

list容器的特点包括:·双向性:每个节点都包含指向前一个节点和后一个节点的指针,因此可以在常数时间内在链表中的任意位置进行插入、删除和访问操作。动态大小:链表的大小可以根据需要动态扩展或收缩,不需要预先指定容器的大小。

不连续存储:链表中的节点可以在内存中的任意位置分布,不要求连续存储,因此插入和删除操作不会导致元素的移动。如 1 22 33 35 63…
list容器提供了一系列成员函数和迭代器来操作和访问链表中的元素,包括插入删除、访问、反转等操作。可以使用迭代器来遍历链表中的元素。

#include <iostream>
#include<list>
int main(){std::list<int> mylist;
// 在链表尾部插入元素myList.push_back(1);myList.push_back(2);myList.push_back(3);
// 在链表头部插入元素myList.push front(@);
//遍历链表并输出元素for(int num :myList){std::cout<< num << " ";}std::cout << std::endl;return 0;
}

在上述示例中,我们首先创建了一个list容器myList,然后使用push_back()和push_front()函数分别在链表尾部和头部插入元素。最后,使用范围基于范围的for循环遍历链表并输出元素。需要注意的是,由于list是双向链表,因此插入和删除操作的时间复杂度是常量时间O(1),但访问和查找操作的时间复杂度是线性时间O(n),其中n是链表的大小。因此,如果需要频繁进行随机访问操作,可能更适合使用支持随机访问的容器,如vector或deque(双端队列)

list容器提供了多个常用的成员函数来操作和访问链表中的元素以下是一些常用的list函数的解释:
1.push_back():将元素插入到链表的末尾。
2.push front():将元素插入到链表的开头。
3.pop back():移除链表末尾的元素。
4.pop front():移除链表开头的元素。
5.size():返回链表中元素的个数。
6.empty():检查链表是否为空。
7.clear():清空链表中的所有元素。
8.front():返回链表中第一个元素的引用。
9.back():返回链表中最后一个元素的引用。
10.begin():返回指向链表第一个元素的迭代器。
11.end():返回指向链表末尾的下一个位置的迭代器。
12.insert():在指定位置之前插入一个或多个元素。
13.erase():从链表中移除指定位置的一个或多个元素。

#include<bits/stdc++.h>
using namespace std;
int main(void) {//创建一个list<int>对象myListlist<int>myList;//向myList尾部添加元素for (int i = 1; i <= 5; ++i)myList.push_back(i);//从头到尾输出myList中的元素for (const auto& i : myList)cout << i << ' ';cout << '\n';//将mylist中的元素反转reverse(myList.begin(), myList.end());for (const auto& i : myList)cout << i << ' ';cout << '\n';//在第一个元素的后一个位置加上元素0myList.insert(++myList.begin(), 0);for (const auto& i : myList)cout << i << ' ';cout << '\n';myList.erase(++++myList.begin(), --myList.end());//输出myList的大小cout << "链表大小为:" << myList.size() << '\n';//从头到尾输出myList中的元素for (const auto& i : myList)cout << i << ' ';cout << '\n';return 0;
}

迭代器相当于是一个指针

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

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

相关文章

苹果电脑深度清理工具CleanMyMac X2025中文版

苹果电脑用户们&#xff0c;你们是否经常感到你们的Mac变得不再像刚拆封时那样迅速、流畅&#xff1f;可能是时候对你的苹果电脑进行一次深度清理了。在这个时刻&#xff0c;拥有一些高效的深度清理工具就显得尤为重要。今天&#xff0c;我将介绍几款优秀的苹果电脑深度清理工具…

java的泛型【详解】

定义类、接口、方法时&#xff0c;同时声明了一个或者多个类型变量&#xff08;如&#xff1a;<E>&#xff09; &#xff0c;称为泛型类、泛型接口&#xff0c;泛型方法、它们统称为泛型。 作用&#xff1a;泛型提供了在编译阶段约束所能操作的数据类型&#xff0c;并自…

【Python】【Pycharm】Python Script头文件设置

1、步骤&#xff1a;File->settings->Editor->File and CodeTemplates->Python Script 2、复制粘贴以下代码&#xff0c;应用即可&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*-# Time :${DATE} ${TIME} # Author : admin # Site :${SITE} …

数据库应用:kylin 部署 达梦数据库DM8

目录 一、实验 1.环境 2.部署前规划 3.部署达梦数据库DM8 4.创建数据库及数据库事例管理 5.达梦数据库的基本操作 二、问题 1.xhost命令报错 2.执行安装程序DMInstall.bin 报错 3.解压安装程序报错 4.安装程序找不到文件 5.图像化界面打不开 6.安装内存太小 7.打开…

unity中实现3D物体在UI前方

在Unity中&#xff0c;如果你想要将3D物体显示在UI的前方&#xff0c;可以通过Canvas和RawImage来实现。以下是一些步骤&#xff1a; 创建Canvas&#xff1a; 在场景中创建一个Canvas对象。你可以在Hierarchy视图中右键点击&#xff0c;选择UI > Canvas&#xff0c;或者在创…

MySQL中year()和month()函数解析与输出示例详解

摘要 在MySQL中&#xff0c;year()和month()函数是用于从日期或日期时间类型的数据中提取年份和月份的常用函数。本文将详细介绍这两个函数的底层逻辑&#xff0c;包括日期格式的识别和相应值的获取&#xff0c;并提供实例和输出结果作为示例。 1. year()函数的底层逻辑 MySQL…

【HarmonyOS】【DevEco ohpm ERROR: NOTFOUND package “@ohos/hypium“如何解决

参考 &#xff1a;&#xff08;无效&#xff09; 华为开发者论坛 DevEco创建项目时的错误解决_6 月 优质更文活动_路北路陈_InfoQ写作社区 解决&#xff1a; HormonyOS-DevEco Studio新建空项目ERROR解决_oh_modules\ohos\hypium-CSDN博客 将 .ohpm文件夹中的hypium文件夹复…

【Node-RED】安全登陆时,账号密码设置

【Node-RED】安全登陆时&#xff0c;账号密码设置 前言实现步骤密码生成setting.js 文件修改 安全权限 前言 Node-RED 在初始下载完成时&#xff0c;登录是无账号密码的。基于安全性考虑&#xff0c;本期博文介绍在安全登陆时&#xff0c;如何进行账号密码设置。当然&#xff…

AI告诉你怎么关闭Windows系统的自动更新的一般步骤——以Windows 10为例

在Windows系统中&#xff0c;彻底关闭自动更新的步骤可能会随着操作系统的版本而有所不同。以下是适用于大多数Windows版本&#xff08;如Windows 10&#xff09;的关闭自动更新的一般步骤&#xff1a; 方法一&#xff1a;使用组策略编辑器 按下 Win R 键打开运行对话框&…

相机图像质量研究(35)常见问题总结:图像处理对成像的影响--运动噪声

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

备战蓝桥杯 Day5

1191&#xff1a;流感传染 【题目描述】 有一批易感人群住在网格状的宿舍区内&#xff0c;宿舍区为n*n的矩阵&#xff0c;每个格点为一个房间&#xff0c;房间里可能住人&#xff0c;也可能空着。在第一天&#xff0c;有些房间里的人得了流感&#xff0c;以后每天&#xff0c;得…

计算最大值和最小值的差值

计算最大值和最小值的差值 . 计算最大值和最小值的差值题目描述:解法思路:解法代码: 题目描述: 输入10个整数&#xff0c;写代码找出其中最大值和最小值&#xff0c;计算最大值和最小值的差&#xff0c;并打印出差值结果 测试1&#xff1a;输入&#xff1a;1 2 3 4 5 6 7 8 9 …

【python】python入门之计算

“数字”&#xff1a; 介绍一下不同形式的数字们 字符串“6”数字6浮点数6.0 注意&#xff1a;输入时的内容自定义为字符串&#xff0c;需要用int&#xff08;&#xff09;进行强制转换 优先级&#xff1a; 常见优先级如下&#xff08;优先级指的是一个算式中先算的部分&…

产品经理学习-产品运营《流程管理》

如何进行流程管理 信息可视化 甘特图-流程管理思维导图-方案讨论原型图-活动文档 明确责任制 分工明确&#xff0c;关键环境有主负责人通过时间倒推督促管理 沟通技巧 明确共同利益以结果激励做好信息同步 如何进行监控活动效果 监控活动的效果是要监控数据 活动每个环境的…

二叉树相关算法需了解汇总-基础算法操作

文章目录 144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历102.二叉树的层序遍历107.二叉树的层次遍历倒序199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针104.二叉树的最大深度111.二叉…

Transformer实战-系列教程21:DETR 源码解读8 损失计算:(SetCriterion类)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 DETR 算法解读 DETR 源码解读1&#xff08;项目配置/CocoDetection类/ConvertCocoP…

06 分频器设计

分频器简介 实现分频一般有两种方法&#xff0c;一种方法是直接使用 PLL 进行分频&#xff0c;比如在 FPGA 或者 ASIC 设计中&#xff0c;都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性&#xff0c;无法得到频率很低的时钟信号&#xff0c;比如输入 …

MySQL-触发器(TRIGGER)

文章目录 1. 触发器是什么&#xff1f;2. 触发器的优缺点3. 触发器的类型3.1 INSERT触发器3.2 UPDATE触发器3.3 DELETE触发器 4. 触发器的相关语法4.1 创建触发器4.2 查看触发器4. 删除触发器 1. 触发器是什么&#xff1f; 定义&#xff1a;MySQL 的触发器和存储过程一样&…

JS面向对象:五.原型对象

使用原型对象来共享方法&#xff0c;可以避免为每个对象创建独立的方法副本&#xff0c;提高代码的效率和可维护性。 在JavaScript中&#xff0c;每个函数都有一个 prototype 属性&#xff0c;这个属性是一个指向原型对象的指针。原型对象是一个普通的对象&#xff0c;它包含可…

如何写项目的ReadMe

README README主要是为了体现项目全景概览或项目描述&#xff0c;告知刚接触的新人&#xff0c;如何快速上手项目&#xff0c;降低沟通成本。 README编写的原则&#xff1a;简明扼要&#xff0c;条理清晰&#xff0c;图文并茂。 至少包含但不限于以下方面&#xff1a; 项目简介…