浅谈C++ STL list 容器
浅谈C++ STL list 容器
本篇随笔简单讲解一下\(C++STL\)中\(list\)容器的使用方法和使用技巧。
list容器的概念
学习过\(C++STL\)的很多同学都知道,\(STL\)(标准模板库)中的容器其实都是我们在算法竞赛中常用数据结构的一些模板。比如说\(queue\)模拟的队列,\(priority\_queue\)模拟的堆等等。那么,我们可以把\(list\)理解为模拟数据结构中“双向链表”的模板。
关于双向链表的基本概念以及手动模拟实现,如有不懂的同学可以看这里:
简单来讲,链表就是数组的一个优化结构,它支持在任意两个元素中插入,也支持删除任意元素后把被删除元素的前后两个元素拼接在一起。
list容器的声明
\(list\)容器的声明和大部分\(STL\)容器的声明方式一样,都是:容器名<变量类型> 名称的结构。值得一提的是,\(list\)容器需要开#include<list>模板库。
#include<list>
list<int> l;
list<char> l;
list<pair<int,int> > l;
list<node> l;
struct node{...};
list容器的使用
与其他STL容器相似的用法
| 用法 | 作用 |
|---|---|
l.begin(),l.end() |
返回list的首、尾迭代器 |
l.front(),l.back() |
返回list的首、尾元素 |
l.push_back() |
在链表后插入一个元素 |
l.push_front() |
在链表前插入一个元素 |
l.pop_back() |
在链表后删除一个元素 |
l.pop_front() |
在链表前删除一个元素 |
l.clear() |
清空链表 |
l.size() |
返回链表中元素的个数 |
l.empty() |
判断链表是否为空 |
插入操作
因为\(list\)支持在任意位置插入和删除,所以如果只能使用\(push\_front()\)和\(pop\_front()\)这种类型的成员函数未免就让它失去了链表的名头。
在\(list\)中,我们使用\(insert()\)函数来支持在任意位置加入元素。原理很简单,上传两个参数,一个是位置参数,一个是值的参数。注意,这里上传的位置参数需要时一个迭代器。这样,插入之后,这个插入元素会在迭代器指向元素的前一位。
类似:
l.insert(it,val);
删除操作
删除操作有两种:一种是删除指定元素,一种是删除指定位置。这两种删除操作贴心地规划了用户在实际编写时可能遇到的问题。
其实也很简单啊。
如果删除的是某位置的元素,直接传这个位置的迭代器。
remove(it);
如果删除的是某个值,就直接传这个值:
remove(val);
这里需要注意:
如果删除的是值,会删除当前链表中所有的这个值。
如果删除的是位置上的元素,会导致这个迭代器从此失效,除非对其重新赋值,否则对其的所有操作都是错误的。这就像植物大战僵尸中的毁灭蘑菇,自己爆炸之后还会留下一个很久才会平的坑(我是颓多了么?)
浅谈C++ STL list 容器的更多相关文章
- 浅谈C++ STL string容器
浅谈C++ STL string容器 本篇随笔简单讲解一下\(C++STL\)中\(string\)容器的使用方法及技巧. string容器的概念 其实\(string\)并不是\(STL\)的一种容 ...
- 浅谈C++ STL vector 容器
浅谈C++ STL vector 容器 本篇随笔简单介绍一下\(C++STL\)中\(vector\)容器的使用方法和常见的使用技巧.\(vector\)容器是\(C++STL\)的一种比较基本的容器 ...
- 浅谈C++ STL queue 容器
浅谈C++ STL queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(queue\)容器的使用方法和常见的使用技巧.\(queue\)容器是\(C++STL\)的一种比较基本的容器.我们 ...
- 浅谈C++ STL stack 容器
浅谈C++ STL stack 容器 本篇随笔简单介绍一下\(C++STL\)中\(stack\)容器的使用方法和常见的使用技巧. stack容器的概念 \(stack\)在英文中是栈的意思.栈是一种 ...
- 浅谈C++ STL deque 容器
浅谈C++ STL deque 容器 本篇随笔简单介绍一下\(C++STL\)中\(deque\)容器的使用方法及常见使用技巧. deque容器的概念 \(deque\)的意义是:双端队列.队列是我们 ...
- 浅谈C++ STL中的优先队列(priority_queue)
从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维的一致性导致的. 今天讲一讲优先队列(priority_queue),实际 ...
- 浅谈C++ STL
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表.队列.栈. C++ 标准模板库的核心包括以 ...
- C++ STL中的常用容器浅谈
STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中 ...
- 浅谈 Vector
目录 浅谈Vector 1.容器基本操作 2.vector 初始化 3.vector的赋值与swap 4.vector的增删改除 1.增加元素 2.访问元素 3.删除元素 4.元素的大小 浅谈Vect ...
随机推荐
- 用python重新定义【2019十大网络流行语】
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:朱小五 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...
- PlayJava Day025
JTable 用JTable类可以以表格的形式显示和编辑数据 JTable类的对象并不存储数据,它只是数据的表现 MVC 数据.表现和控制三者分离,各负其责 M = Model(模型) V = Vie ...
- 2019QM大作业2-weyl半金属Landau Level
目录 说明 for cnblog QM大作业2--weyl半金属的Landau Level \(\boldsymbol{Abstract}\) 说明 Landau Level 自旋与pauli mat ...
- Rsync实现文件的同步
故事背景:我们公司是做新零售的,需要对发布的每台机器进行文件的同步更新,所以我这里做了一个小小的调研 技术调研:linux之间同步文件有两种方式rsync与scp. sync和scp在文件夹均不存在时 ...
- maven配置多个镜像
问题场景 1.国内访问maven默认远程中央镜像特别慢 2.用阿里的镜像替代远程中央镜像 3.大部分jar包都可以在阿里镜像中找到,部分jar包在阿里镜像中没有,需要单独配置镜像 解决方案 setti ...
- SpringCloudGateway开发详解
路由简介: SpringCloudGateWay 是用于替代zuul作为API网关,在gateway中有三个重要的名词:过滤器,断言,路由 过滤器与断言是路由的一部分,路由便是将请求进行一系列的处理后 ...
- Node.js实现图片上传功能
node接口实现 const express = require('express') const mysql = require('mysql') const cors = require('cor ...
- 【问题篇四】启动报DataSource错误
初建一个简单的spring boot 项目,启动后会报错:就是在项目启动的时候在 resource目录下没有加载到配置信息:如果项目只是想简单的启动运行,不进行数据库操作可以在 启动类上做如下处理便可 ...
- my-eclipse 安装与下载
百度网盘下载 链接:https://pan.baidu.com/s/13FFcVLyofd2TBP0zun0zTg 提取码:8ofg MyEclipse CI 2019是一个十分优秀的用于开发Java ...
- 富文本编辑器 tinymce 的安装与使用
百度的富文本编辑器大家都熟悉,那么下面给大家介绍一款富文本编辑器tinymce ,个人感觉比百度的界面好看,调用方便,就不知道各位大神怎么看咯! tinymce中文文档 以下是vue中使用示例,献上最 ...