人小鬼不大

导航

 

1、双向链表简介

  list 是顺序容器的一种。list 是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素,也有一个指针指向前一个元素。在 list 容器中,在已经定位到要增删元素的位置的情况下,增删元素能在常数时间内完成。list 容器不支持根据下标随机存取元素。

2、成员函数

  void push_front(const T & val) 将 val 插入链表最前面
  void pop_front() 删除链表最前面的元素
  void sort() 将链表从小到大排序
  void remove (const T & val) 删除和 val 相等的元素
  remove_if 删除符合某种条件的元素
  void unique() 删除所有和前一个元素相等的元素
  void merge(list <T> & x) 将链表 x 合并进来并清空 x。要求链表自身和 x 都是有序的
  void splice(iterator i, list <T> & x, iterator first, iterator last) 在位置 i 前面插入链表 x 中的区间 [first, last),并在链表 x 中删除该区间。链表自身和链表 x 可以是同一个链表,只要 i 不在 [first, last) 中即可

  可查阅专门的STL手册MSDN了解更多信息。STL 中的算法 sort 可以用来对 vector 和 deque 排序,它需要随机访问迭代器的支持。因为 list 不支持随机访问迭代器,所以不能用算法 sort 对 list 容器排序。因此,list 容器引入了 sort 成员函数以完成排序。
  erase 成员函数返回被删除元素后面那个元素的迭代器。如果被删除的是最后一个元素,则返回 end()。

同样的功能也可以使用vector完成,只是vector 的 erase 操作牵涉元素的移动,不能在常数时间内完成,所花费的时间和容器中的元素个数有关;而 list 的 erase 操作只是修改几个指针而已,可以在常数时间内完成。当 n 很大(数十万)时,两种写法在速度上会有明显区别。

posted on 2020-01-20 14:28  人小鬼不大  阅读(294)  评论(0编辑  收藏  举报