C++标准模板库(STL)-list介绍
C++标准模板库(STL)中的list是一个双向链表,它提供了高效的插入、删除和反转操作。list支持随机访问,这意味着我们可以直接访问任何元素,而不需要从头开始遍历链表。此外,list还支持反向迭代,即可以从尾部开始迭代。
list基本操作
- push_back():在尾部添加一个元素。
myList.push_back(1); // myList: 1
myList.push_back(2); // myList: 1, 2
myList.push_back(3); // myList: 1, 2, 3
- push_front():在头部添加一个元素。
myList.push_front(0); // myList: 0, 1, 2, 3
- pop_back():删除最后一个元素。
myList.
pop_back(); // myList: 0, 1, 2
- pop_front():删除第一个元素。
myList.pop_front(); // myList: 1, 2
- insert(pos, n, elem):在pos位置插入n个elem数据。例如,在位置1插入2个值为3的元素。
myList.insert(myList.begin() + 1, 2, 3); // myList: 0, 3, 3, 1, 2
- erase(pos):删除pos位置的数据,返回下一个数据的位置。例如,删除位置1的数据并返回下一个位置。
list<int>::iterator it = myList.erase(myList.begin() + 1); // myList: 0, 1, 2
- remove(elem):删除容器中所有与elem值匹配的元素。例如,删除所有值为1的元素。
myList.remove(1); // myList: 0, 2
- size():返回容器中元素的个数。例如,返回myList中元素的个数。
int size = myList.size(); // size: 2
list特性
list是一个双向链表,其特性包括:
- 可以在常数时间内进行任意位置的插入和删除操作。
- 可以前后双向迭代。
- 底层是双向链表结构,每个元素存储在互不相关的独立节点中,节点中通过指针指向其前一个元素和后一个元素。
相比vector,list在任意位置插入、移除元素的执行效率通常更好。然而,list不支持任意位置的随机访问,要访问list的特定位置元素,需要从已知的位置(如头部或尾部)开始迭代到该位置,这个过程需要线性时间开销。此外,list还需要一些额外的空间来保存每个节点的相关信息。
应用举例
#include <iostream>
#include <list>int main() {std::list<int> myList;// 添加元素到链表myList.push_back(1);myList.push_back(2);myList.push_back(3);// 使用迭代器遍历链表for (std::list<int>::iterator it = myList.begin(); it != myList.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;// 从链表中删除元素myList.pop_front();myList.pop_back();// 使用反向迭代器遍历链表for (std::list<int>::reverse_iterator it = myList.rbegin(); it != myList.rend(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}
输出:
1 2 3
2 3
相关文章:
C++标准模板库(STL)-list介绍
C标准模板库(STL)中的list是一个双向链表,它提供了高效的插入、删除和反转操作。list支持随机访问,这意味着我们可以直接访问任何元素,而不需要从头开始遍历链表。此外,list还支持反向迭代,即可…...
Arrays.asList
直接去看原文 原文链接:Arrays.asList() 详解-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 【1. 要点】 该方法是将数组转化成List集合的方法。 List<String> lis…...
XXXX项目管理目标(某项目实施后基于软件工程的总结)
(注:此文作于2007年,算是个缅怀,或者是个吐槽。所有注都是本次发表新加的。原文中的省略号就是原文,并非删减。) 目录 一、序 二、态度问题 三、问题点 3.1 项目过程管理的问题 3.2 配置管理的问题 …...
连新手小白都知道的电子画册一键生成器,你还不知道吗?
相信大家平时见得比较多的是纸质画册,而对于电子画册大家又了解多少呢?电子画册近年来倍受众多企业青睐,制作一本好的电子画册能够让企业在市场竞争中脱颖而出,给人以深刻印象。如何制作呢? 其实很简单,关…...
JAVAEE初阶 操作系统
操作系统的相关知识 一.操作系统的定位二.操作系统的作用三.什么是进程/任务1.进程在系统中如何操作和管理 四.PCB中的核心属性1.pid2.内存指针3.文件描述符表 五.CPU1.cpu的特性:分时复发 六.PCB中进行调度的属性1.状态2.优先级3.记账信息 一.操作系统的定位 二.操作系统的作用…...
第四代智能井盖传感器:万宾科技智能井盖位移监测方式一览
现在城市化水平不断提高,每个城市的井盖遍布在城市的街道上,是否能够实现常态化和系统化的管理,反映了一个城市治理现代化水平。而且近些年来住建部曾多次要求全国各个城市加强相关的井盖管理工作,作为基础设施重要的一个组成部分…...
了解JS中的混个对象“类”
类是面向对象的设计模式,它包括实例化、继承和多态 1、理论 面向对象变成强调的是数据和操作的行为本质上是相互关联的,因此好的设计就是把数据以及和他相关的行为打包(封装)起来,我们也叫他数据结构。 类的一个核心…...
在Sprinng Boot中使用Redis充当缓存
关于我们使用EhCache可以适应很多的应用场景了,但是因为EhCache是进程内的缓存框架,在集群模式下,我们在我们的应用服务器或者云服务器之间的缓存都是独立的。故而在不同的服务器之间的进程会存在缓存不一致的情况,就算我们的EhCa…...
【网络】TCP协议的相关实验
TCP协议的相关实验 一、理解listen的第二个参数1、实验现象2、TCP 半连接队列和全连接队列3、关于listen的第二个参数的一些问题4、SYN洪水Ⅰ、什么是SYN洪水攻击Ⅱ、如何解决SYN洪水攻击? 二、使用Wireshark分析TCP通信流程 一、理解listen的第二个参数 在编写TCP…...
微服务测试怎么做
开发团队越来越多地选择微服务架构而不是单体结构,以提高应用程序的敏捷性、可扩展性和可维护性。随着决定切换到模块化软件架构——其中每个服务都是一个独立的单元,具有自己的逻辑和数据库,通过 API 与其他单元通信——需要新的测试策略和新…...
第9章 K8s进阶篇-持久化存储入门
9.1 k8s存储Volumes介绍 Container(容器)中的磁盘文件是短暂的,当容器崩溃时,kubelet会重新启动容器,但最初的文件将丢失,Container会以最干净的状态启动。另外,当一个Pod运行多个Container时&…...
MathType2024最新word公式编辑器
使用word进行论文编写时,常需要使用公式编辑器,但有些word中并没有公式编辑器,这时应该怎么办呢?本文将围绕word里没有公式编辑器怎么办,word中的公式编辑器怎么用的内容进行介绍。 一、word里没有公式编辑器怎么办 …...
英语语法 - 主语从句
[ 主语从句 ] 没有时态要求 | 三单 1. 从属连词 that 引导的主语从句 | 不做句子成分 | 没有意义 That a monster attacked a ship last week shocked the world. That I bought a house in Beijing shocks many people. That Oscar is rich makes us upset. That he didnt wa…...
千梦网创:实现自动化“挂机躺盈”的三种方法
在互联网众多行业中,有很多人一直在寻找所谓的“挂机躺盈”的项目,在理财领域这种收入被称为“被动收入”。 天上不会掉馅饼这是一句讲烂掉的话了,躺在家里吃白食等着钱进账是一件不可能的事情。 然而如果你看到身边有“被动收入”的例子&a…...
微信小程序页面传递参数方法
说明 页面跳转方法有很多中,但经常会通过一个页面传递参数给另一个页面,非常的常见。但数据量大的时候,通常用字符串传递,但会显得过于臃肿,下面介绍页面传递参数的各种方式。 一、页面跳转链接携带参数 例如…...
出行类app如何提升广告变现收益?
出行类APP已经成为越来越多人们出行的首选,出行类app在变现方式上存在以下痛点:APP功能单一、使用场景单一;用户使用时间集中,粘性低...这些痛点使得开发者获取收益的提升面临极大的挑战。 https://www.shenshiads.com 如何让出…...
万能在线答题考试小程序源码系统 既能刷题 又能考试 带完整的搭建教程
现如今,线上学习和考试已经成为一种趋势。近年来,移动端的普及以及微信小程序的兴起,使得在线答题考试系统变得更加便捷和高效。今天罗峰就来给大家介绍一款万能在线答题考试小程序源码系统,既能刷题,又能考试…...
《Linux从练气到飞升》No.30 深入理解 POSIX 信号量与生产消费模型
🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...
高防IP可以抵御哪些恶意攻击
高防IP协议可以隐藏用户的站点,使得攻击者无法发现恶意攻击的目标网络资源,从而提高了源站的安全性。能够有效抵御常见的恶意攻击类型ICMPFlood、UDPFlood、 TCPFlood、SYNFlood、ACKFlood等,帮助游戏、金 融、电子商务、互联网、政企等行业抵…...
vivado产生报告阅读分析6-时序报告2
1、复查时序路径详情 单击“ OK ”运行报告命令后 , 将打开一个新窗口。这样您即可复查其中内容。在其中可查看执行选定的每种类型 (min/max/min_max ) 的分析之后所报告的 N 条最差路径。 下图显示的“Report Timing ” ( 时序报告 ) 窗口…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
