浅谈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 ...
随机推荐
- JavaWeb学习——Servlet相关的接口和类
JavaWeb学习——Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类. Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servle ...
- 一文理解Java IO/NIO/AIO
目录 概述 一.IO流(同步.阻塞) 二.NIO(同步.非阻塞) 三.NIO2(异步.非阻塞) 正文 概述 在我们学习Java的IO流之前,我们都要了解几个关键词 同步与异步(synchronou ...
- Bootstrap4 本地编译运行
Step1. 获取Bootstrap源代码 https://github.com/twbs/bootstrap Step2. 进入目录并切换npm源 npm --registry https://re ...
- Vue学习笔记Day2
1.mustache语法 如何将data中的文本数据插入到HTML中? 通过使用mustache语法(也就是双大括号),将data中的变量名插入到HTML元素中,显示在页面上. 如下图:并且数据是响应 ...
- vue--CRUD
1. Create this.$http.post("http://localhost:3000/users",newCustomer).then(function (respon ...
- ORA-00904:"WM_CONCAT":标识符无效
原创 Oracle 作者:Root__Liu 时间:2019-11-21 18:49:27 514 0 今天客户现场业务甩给我一个报错让处理,ora-00904:"WM_CONCAT&q ...
- 程序员:May the Force be with you!
程序员如何理解:May the Force be with you! 我们并没有向其他人那样讨论现象级产品的生成原因,因为我们并不清楚这个原因是什么. 我们也不知道足记是否会重复过去一些现象级产品忽生 ...
- MySQL创建、修改、删除数据库
创建数据库 CREATE DATABASE [IF NOT EXISTS] t1 CHARACTER SET [=] utf8: 中括号中的代码可有可无:CHARATER如果不写则创建为默认的字符. ...
- 【西北师大-2108Java】第十四次作业成绩汇总
[西北师大-2108Java]第十四次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第16周学习指导及要求 实验目的与要求 (1)掌握Java应用程序的打包操作: (2)掌握线程概念: (3) ...
- 《java编程思想(第四版)》第一二章学习笔记
目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的 ...