Lesson10 list

发布于:2025-02-11 ⋅ 阅读:(78) ⋅ 点赞:(0)

0 概念

   std::list 是 C++ 标准库提供的双向链表容器,它允许元素在容器内部任意位置进行快速插入和删除,但不支持快速随机访问。由于 std::list 是基于链表实现的,因此其元素在内存中不必是连续存储的。

1 基本特性

  • 双向链表:每个节点包含指向前一个元素和后一个元素的指针。通过双向链表,插入和删除操作非常高效。
  • 不支持随机访问:无法通过下标直接访问元素(例如 list[0] 不支持),只能通过迭代器进行访问。
  • 高效的插入和删除:在链表的开头、结尾以及任意位置进行元素插入和删除的时间复杂度为 O(1),不需要移动其他元素。
  • 顺序访问:虽然不支持随机访问,但可以使用迭代器顺序遍历 std::list 中的元素。
  • 内存开销:每个元素除了存储实际数据外,还需要存储指向前后元素的指针。因此,std::list 的内存开销相对较大。

2 常用接口

2.1 构造函数

  • list():构造一个空链表。
  • list(size_t n, const T& val = T()):构造一个包含 n 个值为 val 的元素的链表。
  • list(InputIterator first, InputIterator last):使用两个迭代器区间构造链表。
  • list(const list& other):拷贝构造。

2.2 常用成员函数

(1)大小和容量

  • size():返回链表中元素的个数。
  • empty():检查链表是否为空。
  • max_size():返回链表能够存储的最大元素个数(受限于系统)。

(2)访问元素

  • front():返回链表第一个元素。
  • back():返回链表最后一个元素。

(3)修改元素

  • push_front(const T& val):在链表头部插入元素。
  • push_back(const T& val):在链表尾部插入元素。
  • pop_front():删除链表头部的元素。
  • pop_back():删除链表尾部的元素。
  • insert(iterator pos, const T& val):在指定位置插入元素。
  • erase(iterator pos):删除指定位置的元素。
  • clear():清空链表。
  • resize(size_t n, const T& val = T()):调整链表大小。

(4)其他操作

  • remove(const T& value):删除链表中所有值为 value 的元素。
  • unique():删除相邻的重复元素。
  • merge(list& other):合并另一个链表。
  • splice(iterator pos, list& other):将另一个链表的元素插入当前链表。

2.3 迭代器

  • begin():返回指向第一个元素的迭代器。
  • end():返回指向最后一个元素之后的迭代器。
  • rbegin():返回指向最后一个元素的反向迭代器。
  • rend():返回指向第一个元素之前的反向迭代器。
#i

网站公告

今日签到

点亮在社区的每一天
去签到