浅谈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);

这里需要注意:

  • 如果删除的是值,会删除当前链表中所有的这个值。

  • 如果删除的是位置上的元素,会导致这个迭代器从此失效,除非对其重新赋值,否则对其的所有操作都是错误的。这就像植物大战僵尸中的毁灭蘑菇,自己爆炸之后还会留下一个很久才会平的坑(我是颓多了么?)

最新文章

  1. B/S系统常见缺陷整理和解决方案
  2. 关于replace()方法中第二个参数的转义问题
  3. C#~异步编程续~.net4.5主推的await&amp;async应用
  4. javascript压缩工具
  5. c#如何使输入数据类型限制,C#如何添加限制
  6. Oracle DataGuard数据备份方案详解
  7. Mysql 冷备份批处理
  8. MVC部署-发布本地数据库(Localdb)时连接异常
  9. C++出现计算机术语5
  10. 小哈学Python第四课--运算符
  11. JS中replace()用法举例
  12. iOS学习——属性引用self.xx与_xx的区别
  13. 《javascript设计模式与开发实践》阅读笔记(15)—— 装饰者模式
  14. 欢迎使用 MWeb-Test
  15. hdu2074 叠筐
  16. winfrom
  17. python 路径处理
  18. C#访问和操作MYSQL数据库
  19. 基于开源SuperSocket实现客户端和服务端通信项目实战
  20. mysql操作类

热门文章

  1. Java源码记录 - AbstractMap
  2. MongoDB用户验证和权限管理
  3. CentOS7 如何升级Git
  4. windows的两种sshd服务器安装
  5. JVM-7-类加载机制
  6. [译]Vulkan教程(29)组合的Image采样器
  7. PHP ThinkPHP 非常好用的增删改查方法
  8. PAT 1005 Spell It Right 字符串处理
  9. word-break、word-wrap、white-space区别
  10. Dynamics 365 Online-Delete Audit History Data