list链表容器

一,特点

  • 双向迭代<list> 提供了双向迭代器,可以向前和向后遍历元素。
  • 动态大小 :与数组不同,<list> 的大小可以动态变化,不需要预先分配固定大小的内存。
  • 快速插入和删除:可以在列表的任何位置快速插入或删除元素,而不需要像向量那样移动大量元素
  • 💦 list 容器的优点
    高效的插入和删除:由于std::list是基于带头双向循环链表实现的,插入和删除操作在任意位置都具有常数时间复杂度O(1),不需要移动其他元素。这使得std::list在需要频繁插入和删除元素的场景下非常高效。
    稳定的迭代器:在std::list中进行插入和删除操作不会使得迭代器失效。这意味着在插入或删除元素后,仍然可以继续使用之前获取的迭代器进行遍历和操作。
    动态内存管理:std::list可以动态调整大小,根据需要分配和释放内存。这使得std::list能够有效地处理大量元素的情况,而不会浪费过多的内存空间。
  • 💦 list 容器的缺点
    低效的随机访问:由于std::list的存储结构是带头双向循环链表,访问元素时需要从头或尾开始遍历链表,因此在列表中进行随机访问的效率较低。获取特定位置的元素需要遍历链表,时间复杂度为O(n),其中n是元素的总数量。
    占用额外内存:相较于其他容器,std::list在存储上需要额外的指针来维护链表结构,因此在存储大量元素时,它可能占用更多的内存空间。
    迭代器不支持指针算术:std::list的迭代器不支持指针算术运算,无法像指针那样直接进行加减操作,这限制了一些操作的灵活性。

二,list的使用

插入与删除指定元素

cpp 复制代码
#include <iostream>
#include <list>

int main() {
    std::list<int> lst = { 1, 2, 3, 4, 5 };
    auto it = lst.begin();
    std::advance(it, 2);          // 移动迭代器到第3个元素(值为3)

    lst.insert(it, 10);           // 在第3个元素前插入10
    lst.erase(it);                // 删除第3个元素

    // 输出链表内容
    std::cout << "List elements: ";
    for (const auto& elem : lst) {   //elem是当前遍历到的元素的引用
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

排序与去重

cpp 复制代码
#include <iostream>
#include <list>
using namespace std;

int main() {
    std::list<int> lst = { 1, 2, 3, 4,3,1,2 ,5 };
   lst.sort();
   lst.unique();
   
   //输出链表内容
   for (const auto& m : lst) {
       cout << m << endl;
   }

    return 0;
}
相关推荐
paeamecium2 小时前
【PAT甲级真题】- Student List for Course (25)
数据结构·c++·算法·list·pat考试
Book思议-2 小时前
【数据结构】栈与队列全方位对比 + C 语言完整实现
c语言·数据结构·算法··队列
是苏浙3 小时前
初识集合框架
java·数据结构
如何原谅奋力过但无声4 小时前
【chap11-动态规划(上 - 基础题目&背包问题)】用Python3刷《代码随想录》
数据结构·python·算法·动态规划
小王C语言5 小时前
【基础IO】————简单设计一下libc库
前端·数据结构·算法
_日拱一卒6 小时前
LeetCode:滑动窗口的最大值
数据结构·算法·leetcode
老约家的可汗6 小时前
list 容器详解:基本介绍与常见使用
c语言·数据结构·c++·list
Book思议-6 小时前
【数据结构】字符串模式匹配:暴力算法与 KMP 算法实现与解析
数据结构·算法·kmp算法·bf算法
mifengxing7 小时前
力扣HOT100——(1)两数之和
java·数据结构·算法·leetcode·hot100
罗湖老棍子7 小时前
【 例 1】区间和(信息学奥赛一本通- P1547)(基础线段树和单点修改区间查询树状数组模版)
数据结构·算法·线段树·树状数组·单点修改 区间查询