容器总结——list、forward list

来源:互联网 发布:疯狂挂机赚钱软件 编辑:程序博客网 时间:2024/04/28 00:41

  1. List    #include<list>

使用doubly linked list管理元素

 

特性:

List自身提供两个pointer指向第一个和最后一个元素,每个元素有两个pointer指向前一个和后一个元素,安插元素只需操作相应的pointer即可。

与前三个容器不同:

  1. 不支持随机访问,访问任意元素很缓慢,可以从两端开始航行整个list

  2. 任何位置的安插都很快,常量时间

  3. 安插和删除元素并不会使referencepointeriterator失效

  4. 对异常要么成功要么不发生

List提供的成员函数:

  1. front()push_front()pop_front()push_back()pop_back()back()

  2. 不支持随机访问,不提供 [ ]、和at()

  3. 没有必要重新分配内存

  4. 提供了不少特殊成员函数,用于移动和删除元素,比STL通用算法快,因为只需调整pointer即可

    1. List的操作

      创建复制销毁、非更易操作、赋值操作没有特殊。

    2. 元素访问

      Range-based for、操作函数、迭代器。

      不支持随机访问,只有front()back()可以直接访问

      对空容器任何操作导致不明确行为

    3. 迭代器相关函数

      只有运用迭代器才能访问list中各个元素,提供双向迭代器,反向迭代器,用到随机访问迭代器的算法(操作元素顺序的算法、排序算法)都不能处理list,但是list提供特殊成员函数sort()

    4. 安插和移除

      提供deque的所有功能,还增加了remove()remove_if()算法的特殊版本。速度更快,只进行内部pointer操作,不改变元素。

      保证:1.迭代器必须指向一个合法位置2.区间的其实位置不能在位置结束之后

      安插多个元素时调用一次更快

      操作函数不会造成iteratorreference失效。

    5. 异常处理

      STL所有容器中,List对于异常的安全性提供了最佳支持。

      List特殊更易操作:P297(区别于一般算法)

  1. Foeward list    #include<forward_list>

    1. List的操作

      创建复制销毁操作没有特殊。

    2. 非更易操作

      不提供.size()操作,不存储元素的数目,无法在常量时间计算他。计算元素个数可以用distance()(应用广泛),具有线性复杂度,需要#include<iterator>

    3. 赋值

      序列式容器都有的赋值操作

    4. 元素访问

      Range-based for、操作函数、迭代器。

      不支持随机访问,只有front()可以直接访问

      对空容器任何操作导致不明确行为

    5. 迭代器相关函数

      运用迭代器才能访问list中各个元素,提供双向迭代器(表示不解)、单向迭代器

      无法调用双向或随机迭代器的算法,所有大量改变元素次序的算法特别是sort算法都是此类。Forward list提供了特殊成员函数sort()

      此外提供.befor_begin().cbefor_begin()为了改动第一个元素,不能将.befor_begin()STL任何算法的第一实参。

    6. 安插和删除

      保证:1.迭代器必须指向一个合法位置2.区间的其实位置不能在位置结束之后

      安插多个元素时调用一次更快

      提供remove()remove_if()算法的特殊版本。速度更快,只进行内部pointer操作,不改变元素。

      对于forward list,无法回头,与list不同,后缀_after安插或删除在给定元素之后P306

    7. 查找移除和安插

      查找准则应该是下一个满足条件的当时元素,用两个迭代器或者用便捷函数next()

      可以定义自己的算法,找出拥有特定值得元素的前一位置。

    8. 接合函数

      list一样可以在常量时间内移除和安插元素于任何位置,只需重定位pointer即可forward List特殊更易操作:P310(区别于一般算法)

    9. 异常处理

list完全相同
0 0