(3)std::list

std::list 是 C++ 标准模板库(STL)中的一个序列容器,它实现了双向链表(Doubly-Linked List)。
与 std::vector 的连续存储不同,std::list 中的元素在内存中是分散的,通过指针相互连接。这种结构决定了它的独特性能特征。
双向链表:
 - 每个元素(节点)包含数据、一个指向前一个节点的指针和一个指向后一个节点的指针。
 - 支持双向遍历。
 
非连续存储:
 - 元素在内存中不连续,这与 std::vector 形成鲜明对比。
 - 无法使用指针算术或像数组一样访问。

高效的任意位置插入/删除:
 - 在已知位置(通过迭代器)插入或删除元素的时间复杂度为 O(1)。
 - 这是 std::list 最大的优势,无论是在头部、中间还是尾部。
 
低效的随机访问:
 - 由于元素不连续,访问第 n 个元素需要从头或尾开始遍历,时间复杂度为 O(n)。
 - 不支持 operator[] 或 at()。

动态大小与无容量限制:
 - 大小可以动态增长或缩小。
 - 没有“容量(capacity)”的概念,每次插入都分配新节点,删除则释放节点。

稳定的迭代器:
 - 这是 std::list 的另一个巨大优势。
 - 插入操作不会使任何迭代器失效。
 - 只有被删除元素的迭代器会失效,其他所有迭代器、指针和引用都保持有效。
posted @ 2018-06-20 22:57  osbreak  阅读(885)  评论(0)    收藏  举报