• 【C++STL基础入门】list的增、删



    前言

    在C++中,STL(Standard Template Library)是一个功能强大且常用的程序库,它为我们提供了许多容器和算法,使得编写高效且可维护的代码变得更加容易。其中,list是STL中的一个双向链表容器,它可以在任意位置高效地插入和删除元素。本文将介绍list容器的基本用法,包括如何增加和删除其中的元素。


    一、list迭代器

    1.1 list迭代器的定义

    二、list增

    2.1 头添加

    1、push_front(const TYPE &val )
    功能:将元素 val 插入到list容器的开头。
    参数:val - 要插入的元素的值。
    返回值:无返回值。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_front(10);
        myList.push_front(5);
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:5 10
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    2.2 尾添加

    2、void push_back( const TYPE &val );
    功能:将元素 val 插入到list容器的末尾。
    参数:val - 要插入的元素的值。
    返回值:无返回值。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(5);
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:10 5
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    2.3 中间添加

    1、iterator insert( iterator loc, const TYPE &val );
    功能:将元素 val 插入到迭代器 loc 所指示的位置之前。
    参数:loc - 指向插入位置的迭代器;val - 要插入的元素的值。
    返回值:指向插入的元素的迭代器。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(30);
        
        auto it = myList.begin(); // 指向第一个元素的迭代器
        ++it; // 指向第二个元素的迭代器
        myList.insert(it, 15); // 在第二个元素之前插入15
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:10 15 20 30
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    2、void insert( iterator loc, size_type num, const TYPE &val );

    功能:将 num 个值为 val 的元素插入到迭代器 loc 所指示的位置之前。
    参数:loc - 指向插入位置的迭代器;num - 要插入的元素的数量;val - 要插入的元素的值。
    返回值:无返回值。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(30);
        
        auto it = myList.begin(); // 指向第一个元素的迭代器
        ++it; // 指向第二个元素的迭代器
        myList.insert(it, 2, 15); // 在第二个元素之前插入两个值为15的元素
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:10 15 15 20 30
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    3、void insert( iterator loc, input_iterator start, input_iterator end );
    功能:将范围 [start, end) 的元素插入到迭代器 loc 所指示的位置之前。
    参数:loc - 指向插入位置的迭代器;start 和 end - 定义要插入范围的迭代器。
    返回值:无返回值。
    示例代码:

    #include 
    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(30);
        
        std::vector<int> myVector{5, 15};
        auto it = myList.begin(); // 指向第一个元素的迭代器
        ++it; // 指向第二个元素的迭代器
        myList.insert(it, myVector.begin(), myVector.end()); // 在第二个元素之前插入myVector的元素
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:10 5 15 20 30
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    三、list删

    3.1 尾删除

    1、void pop_back();
    功能:从list容器的末尾删除一个元素。
    参数:无参数。
    返回值:无返回值。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(30);
        
        myList.pop_back(); // 删除末尾元素
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:10 20
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    3.2 头删除

    1、pop_front()
    功能:从list容器的开头删除一个元素。
    参数:无参数。
    返回值:无返回值。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(30);
        
        myList.pop_front(); // 删除开头元素
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:20 30
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    3.3 删除指定元素

    1、 iterator erase( iterator loc );
    功能:删除迭代器 loc 所指示的元素。
    参数:loc - 指向要删除元素的迭代器。
    返回值:指向被删除元素之后位置的迭代器。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(30);
        
        auto it = myList.begin(); // 指向第一个元素的迭代器
        ++it; // 指向第二个元素的迭代器
        myList.erase(it); // 删除第二个元素
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:10 30
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    2、 iterator erase( iterator start, iterator end );
    功能:删除位于范围 [start, end) 内的元素。
    参数:start 和 end - 定义要删除范围的迭代器。
    返回值:指向被删除元素后位置的迭代器。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(30);
        
        auto start = myList.begin(); // 指向第一个元素的迭代器
        auto end = myList.end(); // 结束迭代器
        myList.erase(start, end); // 删除所有元素
        
        std::cout << "List size after erase: " << myList.size() << std::endl;
        // 输出:List size after erase: 0
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    3.4 clear()函数

    1、clear()
    功能:清空list容器,删除所有元素。
    参数:无参数。
    返回值:无返回值。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(30);
        
        myList.clear(); // 清空list
    
        std::cout << "List size after clear: " << myList.size() << std::endl;
        // 输出:List size after clear: 0
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    3.5 remove()函数

    1、void remove( const TYPE &val );
    功能:从list容器中删除所有与指定值 val 相等的元素。
    参数:val - 要删除的元素的值。
    返回值:无返回值。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(30);
        myList.push_back(20);
        
        myList.remove(20); // 删除所有值为20的元素
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:10 30
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    3.6 unique()函数

    1、unique()
    功能:从list容器中删除所有连续重复的元素,只保留一个副本。
    参数:无参数。
    返回值:无返回值。
    示例代码:

    #include 
    #include 
    
    int main() {
        std::list<int> myList;
        myList.push_back(10);
        myList.push_back(20);
        myList.push_back(20);
        myList.push_back(30);
        myList.push_back(30);
        myList.push_back(30);
    
        myList.unique(); // 删除连续重复的元素
    
        for (const auto& element : myList) {
            std::cout << element << " ";
        }
        // 输出:10 20 30
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述


    总结

    本文介绍了如何使用C++STL中的list容器进行元素的增加和删除。通过使用push_back()和push_front()函数,我们可以向list容器的末尾和开头添加元素;而使用pop_back()和pop_front()函数,可以从list容器的末尾和开头删除元素。list容器的特点是可以高效地在任意位置进行插入和删除操作,适用于需要频繁修改容器的场景。希望本文能够帮助你入门使用list容器,并进一步了解C++STL的强大功能。

  • 相关阅读:
    前端报表如何实现无预览打印解决方案或静默打印
    KITTI数据集解析和可视化
    【Vue2和Vue3的双向绑定区别】
    第9章 无监督学习
    第三十章 管理许可(三)
    sqli-labs关卡之一(两种做法)
    初学python爬虫学习笔记——爬取网页中小说标题
    MyBatis - 环境配置
    QT转型Visual Studio(qmake项目到cmake项目的移植)
    Tomcat的下载安装与配置
  • 原文地址:https://blog.csdn.net/m0_62599305/article/details/132395278