list 是顺序容器的一种。

底层 是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素,也有一个指针指向前一个元素。

list的初始化:

list<T> 容器模板定义在 list 头文件中,是 T 类型对象的双向链表。

list 容器具有一些 vector 和 deque 容器所不具备的优势,它可以在常规时间内,在序列已知的任何位置插入或删除元素。这是我们使用 list,而不使用 vector 或 deque 容器的主要原因。

list 的缺点是无法通过位置来直接访问序列中的元素,也就是说,不能索引元素。为了访问 list 内部的一个元素,必须一个一个地遍历元素,通常从第一个元素或最后一个元素开始遍历。

图 1 展示了 list 容器中的元素在概念上是如何组织的。


图 1 list<T>容器中元素的组织

list<T> 容器的每个 T 对象通常都被包装在一个内部节点对象中,节点对象维护了两个指针,一个指向前一个节点,另一个指向下一个节点。这些指针将节点连接成一个链表。通过指针可以从任何位置的任一方向来遍历链表中的元素。第一个元素的前向指针总是为 null,因为它前面没有元素,尾部元素的后向指针也总为 null。这使我们可以检测到链表的尾部。list<T> 实例保存了头部和尾部的指针。这允许我们从两端访问链表,也允许从任一端开始按顺序检索列表中的元素。

可以用和其他序列容器相同的方式,来获取 list 容器的迭代器。因为不能随机访问 list 中的元素,获取到的迭代器都是双向迭代器。以 list 为参数,调用 begin() 可以得到指向 list 中第一个元素的迭代器。通过调用 end(),可以得到一个指向最后一个元素下一个位置的迭代器,因此像其他序列容器一样,可以用它们来指定整个范围的元素。

也可以像其他容器一样,使用 rbegin()、rend()、crbegin()、crend()、cbegin()、cend() 来获取反向迭代器和 const 迭代器。

list 容器的使用、创建和初始化

list 容器的构造函数的用法类似于 vector 或 deque 容器。下面这条语句生成了一个空的 list 容器:

  1. std::list<std::string> words;

可以创建一个带有给定数量的默认元素的列表:

  1. std::list<std::string> sayings {20}; // A list of 20 empty strings

元素的个数由构造函数的参数指定,每一个元素都由默认的构造函数生成,因此这里调用 string() 来生成元素。

下面展示如何生成一个包含给定数量的相同元素的列表:

  1. std::list<double> values(50, 3.14159265);

这里生成了一个具有 50 个 double 型值的列表,并且每一个值都等于 π。注意在圆括号中,不能使用初始化列表 {50,3.14159265},这样列表将仅仅包含两个元素。

list 容器有一个拷贝构造函数,因此可以生成一个现有 list 容器的副本:

  1. std::list<double> save_values {values}; // Duplicate of values

可以用另一个序列的开始和结束迭代器所指定的一段元素,来构造 list 容器的初始化列表:

  1. std::list<double> samples {++cbegin(values), --cend(values)};

除了 value 中的第一个和最后一个元素,其他元素都被用来生成列表。因为 list 容器的 begin() 和 end() 函数返回的都是双向迭代器,所以不能用它们加减整数。修改双向迭代器的唯一方式是使用自增或自减运算符。当然,在上面的语句中,初始化列表中的迭代器可以代表任意容器的一段元素,而不仅仅只是 list 容器。

可以通过调用 list 容器的成员函数 size() 来获取它的元素个数。也可以使用它的 resize() 函数来改变元素个数。如果 resize() 的参数小于当前元素个数,会从尾部开始删除多余的元素。如果参数比当前元素个数大,会使用所保存元素类型的默认构造函数来添加元素。

list函数用法如下:

  1. assign() 给list赋值
  2. back() 返回最后一个元素
  3. begin() 返回指向第一个元素的迭代器
  4. clear() 删除所有元素
  5. empty() 如果list是空的则返回true
  6. end() 返回末尾的迭代器
  7. erase() 删除一个元素
  8. front() 返回第一个元素
  9. get_allocator() 返回list的配置器
  10. insert() 插入一个元素到list中
  11. max_size() 返回list能容纳的最大元素数量
  12. merge() 合并两个list
  13. pop_back() 删除最后一个元素
  14. pop_front() 删除第一个元素
  15. push_back() 在list的末尾添加一个元素
  16. push_front() 在list的头部添加一个元素
  17. rbegin() 返回指向第一个元素的逆向迭代器
  18. remove() 从list删除元素
  19. remove_if() 按指定条件删除元素
  20. rend() 指向list末尾的逆向迭代器
  21. resize() 改变list的大小
  22. reverse() 把list的元素倒转
  23. size() 返回list中的元素个数
  24. sort() 给list排序
  25. splice() 合并两个list
  26. swap() 交换两个list
  27. unique() 删除list中重复的元素

C++ list 函数用法整理相关推荐

  1. rand函数用法整理

    rand函数用法整理 一.普通用法 1.1 生成随机数 rand()函数不需要参数,它将会返回0到RAND_MAX之间的任意的整数.如果我们想要生成一个在区间[0, 1]之内的数,那么我们可以写出如下 ...

  2. Python中random函数用法整理

    目录 1. random.random(): 返回随机生成的一个浮点数,范围在[0,1)之间 2. random.uniform(a, b): 返回随机生成的一个浮点数,范围在[a, b)之间 3.  ...

  3. c++ function函数用法整理

    首先使用function函数需要#include 个人现在看类似于自定义一个类型名,类似于auto,int,string这样的. 比如: // 普通函数 int add(int i, int j) { ...

  4. 《编码规范和测试方法——C/C++版》作业 ·002——函数返回地址、static关键词用法整理

    文章目录 一.函数返回地址的情形 1.函数返回值为指针 二.static关键字用法整理 1.static全局变量 2.static局部变量 3.static函数 4.类的static成员数据 5.类的 ...

  5. GLUT及其函数的用法整理

    GLUT - The OpenGL Utility Toolkit glut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这 ...

  6. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  7. python Pool常用函数用法总结

    在本篇内容里小编给大家整理的是一篇关于python Pool常用函数用法总结内容,有需要的朋友们可以学习下. 1.说明 apply_async(func[,args[,kwds]):使用非堵塞调用fu ...

  8. php中年月日用什么参数,PHP中date()日期函数参数整理

    PHP中date()日期函数参数整理 发布于 2014-11-19 13:34:06 | 105 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...

  9. 数据库:SQLServer Stuff 函数用法笔记

    今天小编给大家分享一下自己整理一下SQLServer Stuff函数用法技巧和常用示例,有需要的朋友可以学习一下. 一.Stuff函数的作用 1.1官方解释 STUFF 函数将字符串插入到另一个字符串 ...

最新文章

  1. easyexcel导入固定sheet_easyexcel指定多个sheet导excel数据
  2. 服务器系统版本选择,云服务器选择系统版本
  3. 渗透知识-编译器漏洞
  4. python需要电脑配置-python3批量统计用户电脑配置
  5. erlang mysql driver_erlang_mysql_driver 源码分析2
  6. c语言源程序要求每行只能书写一条语句,C语言章节习题集(全)
  7. 降雨插值_ArcGIS计算土壤侵蚀模数(二)降雨侵蚀力因子R计算
  8. 自定义服务器控件的元数据属性(MSDN)
  9. 部署中遇到的问题(四)
  10. VC dimension(Vapnik-Chervonenkis dimension)
  11. 海信电视一直处在Android,【干货收藏】海信电视免root精简教程,去除自带无用软件,替换桌面可实现开机自启动...
  12. python书籍推荐1001python书籍推荐_Python之codebook笔记
  13. sql server order by 的一些高级用法
  14. phpmyadmin linux 升级,phpMyAdmin 4.9.2发布下载,附主要更新内容介绍
  15. Python代码格式化工具autopep8安装及使用极简版
  16. python数据分析学生成绩查询系统_python数据分析-学生成绩分析
  17. 最近整理的乱七八糟的东东
  18. 【Spring】Spring IOC学习笔记
  19. 【MXNet学习16】在MXNet中使用Dropout
  20. Posts Tagged ‘ionCube Loader is a Zend-Engine extension and not a module’

热门文章

  1. 网络间谍在2017年被列为全球企业最为严重的威胁
  2. 个人作品- 蘑菇大战
  3. java里包含怎么算_java中怎么判断一个字符串中包含某个字符或字符串
  4. 技术人创业建站简略指南(第一季)
  5. 关于网站注册账号时提示Server 对象 错误 'ASP 0177 : 800401f3'
  6. 软件性能测试中常见问题,性能测试常见的问题
  7. java 泛型(generics)使用总结
  8. flink checkpoint 恢复_Apache Flink 管理大型状态之增量 Checkpoint 详解
  9. 双机热备份VRRP当接入方式为PPPOE拨号的图文教程
  10. 探讨绝对哲学存在的必要条件