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

举报
人才程序员 发表于 2023/08/29 12:15:02 2023/08/29
【摘要】 @TOC 前言在C++中,STL(Standard Template Library)是一个功能强大且常用的程序库,它为我们提供了许多容器和算法,使得编写高效且可维护的代码变得更加容易。其中,list是STL中的一个双向链表容器,它可以在任意位置高效地插入和删除元素。本文将介绍list容器的基本用法,包括如何增加和删除其中的元素。 一、list迭代器 1.1 list迭代器的定义 二、lis...

@TOC


前言

在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 <list>
#include <iostream>

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;
}

在这里插入图片描述

2.2 尾添加

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述

2.3 中间添加

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述

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

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述

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

#include <list>
#include <iostream>
#include <vector>

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;
}

在这里插入图片描述

三、list删

3.1 尾删除

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述

3.2 头删除

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述

3.3 删除指定元素

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述

3.4 clear()函数

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述

3.5 remove()函数

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述

3.6 unique()函数

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

#include <list>
#include <iostream>

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;
}

在这里插入图片描述


总结

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。