• C++标准模板库(STL)-list介绍


    C++标准模板库(STL)中的list是一个双向链表,它提供了高效的插入、删除和反转操作。list支持随机访问,这意味着我们可以直接访问任何元素,而不需要从头开始遍历链表。此外,list还支持反向迭代,即可以从尾部开始迭代。

    list基本操作

    1. push_back():在尾部添加一个元素。
    myList.push_back(1); // myList: 1
    myList.push_back(2); // myList: 1, 2
    myList.push_back(3); // myList: 1, 2, 3
    
    • 1
    • 2
    • 3
    1. push_front():在头部添加一个元素。
    myList.push_front(0); // myList: 0, 1, 2, 3
    
    • 1
    1. pop_back():删除最后一个元素。
    myList.
    pop_back(); // myList: 0, 1, 2
    
    • 1
    • 2
    1. pop_front():删除第一个元素。
    myList.pop_front(); // myList: 1, 2
    
    • 1
    1. insert(pos, n, elem):在pos位置插入n个elem数据。例如,在位置1插入2个值为3的元素。
    myList.insert(myList.begin() + 1, 2, 3); // myList: 0, 3, 3, 1, 2
    
    • 1
    1. erase(pos):删除pos位置的数据,返回下一个数据的位置。例如,删除位置1的数据并返回下一个位置。
    list<int>::iterator it = myList.erase(myList.begin() + 1); // myList: 0, 1, 2
    
    • 1
    1. remove(elem):删除容器中所有与elem值匹配的元素。例如,删除所有值为1的元素。
    myList.remove(1); // myList: 0, 2
    
    • 1
    1. size():返回容器中元素的个数。例如,返回myList中元素的个数。
    int size = myList.size(); // size: 2
    
    • 1

    list特性

    list是一个双向链表,其特性包括:

    1. 可以在常数时间内进行任意位置的插入和删除操作。
    2. 可以前后双向迭代。
    3. 底层是双向链表结构,每个元素存储在互不相关的独立节点中,节点中通过指针指向其前一个元素和后一个元素。

    相比vector,list在任意位置插入、移除元素的执行效率通常更好。然而,list不支持任意位置的随机访问,要访问list的特定位置元素,需要从已知的位置(如头部或尾部)开始迭代到该位置,这个过程需要线性时间开销。此外,list还需要一些额外的空间来保存每个节点的相关信息。

    应用举例

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
    
        // 添加元素到链表
        myList.push_back(1);
        myList.push_back(2);
        myList.push_back(3);
    
        // 使用迭代器遍历链表
        for (std::list<int>::iterator it = myList.begin(); it != myList.end(); ++it) {
            std::cout << *it << " ";
        }
        std::cout << std::endl;
    
        // 从链表中删除元素
        myList.pop_front();
        myList.pop_back();
    
        // 使用反向迭代器遍历链表
        for (std::list<int>::reverse_iterator it = myList.rbegin(); it != myList.rend(); ++it) {
            std::cout << *it << " ";
        }
        std::cout << std::endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    输出:

    1 2 3 
    2 3
    
    • 1
    • 2
  • 相关阅读:
    微信小程序(分包)
    Google Earth Engine(GEE)——全球河流宽度数据集1970—2017年
    MySQL面试必备二之binlog日志
    学习路之PHPstorm--使用ftp功能连宝塔报错
    【Linux】腾讯云服务器Linux环境搭载
    非零基础自学Java (老师:韩顺平) 第14章 集合 14.6 Vector 底层结构和源码分析
    C# Solidworks二次开发:程序工具界面和选项相关API详解
    【信号隐藏-数字水印】基于小波变换算法DWT结合离散余弦变换DCT实现音频数字水印嵌入提取附matlab代码
    基于C#实现最长公共子序列
    多元宇宙优化算法(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/scy518/article/details/134454298