zoukankan      html  css  js  c++  java
  • C++ 头文件系列(list)

    简介

    list实现的实际上是双向链表,所以叫它doubly-linked list也许更好。 因为实现的是双向链表,所以它有两个非常重要的性质:

    • 双向
    • 链表

    双向

    双向意味着----给定一个元素,我们能够知道后一个元素和前一个元素。而这在单项链表里是不可能实现的,因为单向链表只维护了单个方向的元素信息。

    这种具体实现决定了,list的迭代器是双向迭代器(Bidirectional Iterator)。

    链表

    优点

    链表, 即 链▪表。 它暗示了链接的实质,也就是说,链表中的元素存储单元不一定是顺序的,只是通过绳子串连起来(-_-)。 这个事实导致了链表的特殊之处----插入和删除操作是常数时间的。 因为执行这两个操作的时候,我们只要修改单个元素两边的信息就可以了,不必动其他数据。 不像很多用数组作为内部结构的容器,这两个操作往往需要移动一部分元素来维持元素位置的正确性。

    缺点

    当然了,祸福相依,链表的这种机制也导致了它某些方面的欠缺----元素的访问不是常数时间的。 因为链表的顺序是通过额外的数据来维护的(一般是指针),获取元素往往在给定一个迭代器的基础上通过遍历来实现,因此在距离上是线性时间复杂度。

    特殊函数

    基于链表的特殊性质(常数时间的插入和删除操作),list类模版提供了一些特殊的函数

    • splice:将一个list中的元素 拼接 到另一个list中。 标准文档上给出的解释是“destructively move elements from one list to another”,也就是说两个list对象都会被影响
    • merge:合并两个list,效果上像是splice的特例。
    • remove、remove_if:移除相等的元素、移除满足给定条件的元素。
    • unique:移除重复的元素,也即使元素唯一
    • sort:对list进行排序。
    • reverse:逆转链表,这个对于双向链表来说非常方便,只要交换一下头尾指针的值就可以了。
  • 相关阅读:
    20170417成员运算符、身份运算符、布尔运算符
    20170417学习find、replace、abs三个函数
    shell 双中括号 双小括号
    man 命令
    awk 命令-对文本和数据进行处理
    shell-1-day
    shell---0-day
    /etc
    Selenium IDE使用
    python 自动化测试框架 pytest 和unittest 的区别
  • 原文地址:https://www.cnblogs.com/lgxZJ/p/6296898.html
Copyright © 2011-2022 走看看