• 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
  • 相关阅读:
    Flink 开发环境搭建
    Maven[项目构建工具]
    Linux CentOS 8(iptables的配置与管理)
    【Flink】Flink 中的时间和窗口之窗口(Window)
    如何做好项目管理
    ‘Settings‘ object has no attribute ‘screen_width‘
    秒杀官方实现,python界面库,去掉90%事件代码的nicegui
    GBase 8c V3.0.0数据类型——网络地址函数和操作符(cidr和inet操作符)
    【Redis】redis中几个基本的全局命令
    node.js的pat/fs/events模块以及磁盘遍历的实现
  • 原文地址:https://blog.csdn.net/scy518/article/details/134454298