【C++】list的使用方法

本文详细介绍了C++标准模板库中的List容器,包括其特点、常用函数及其应用场景。重点讲解了如何利用List进行高效的插入与删除操作,并展示了多个实用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。 与vector相比, 它允许快速的插入和删除,但是随机访问却比较慢.
首先我们来看一下list都有哪些接口:
这里写图片描述
list中常用的函数
front() 返回第一个元素
back():返回最后一个元素
注意:list中元素是空的时候,这时候调用front()和back()会发生什么呢?实际上会发生不能正常读取数据的情况,但是这并不报错,那我们编程序时就要注意了,个人觉得在使用之前最好先调用empty()函数判断list是否为空。
begin():返回指向第一个元素的迭代器,通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator
end() 返回末尾的迭代器 ,可以调用list容器的 end() 函数来得到list末端下一位置。
pop_back():删除最后一个元素
pop_front():删除第一个元素
push_back():在list的末尾添加一个元素
push_front():在list的头部添加一个元素

void print_list(const list<int>& l)
{
    list<int>::const_iterator it = l.begin();
    while (it != l.end()) //end()相当于:int a[n]中的第n+1个位置a[n],实际上是不存在的,不能访问,经常作为循环结束判断结束条件使用
    {
        cout << *it << " ";
        ++it;
    }
    cout << endl;
}
void test_list()
{
    list<int> l;

    //从头部向list中插入数据
    l.push_front(3);
    l.push_front(2);
    l.push_front(1);

    //从尾部向list中插入数据
    l.push_back(4);
    l.push_back(5);
    l.push_back(6);
    print_list(l);

    //从头部删除数据
    l.pop_front();

    //从尾部删除数据
    l.pop_back();

    print_list(l);

    //获取第一个元素和最后一个元素
    cout << "第一个元素:" << l.front() << endl;
    cout << "最后一个元素:" << l.back() << endl;
}

运行结果:
这里写图片描述
assign():给list赋值

void test_list()
{
    list<int> l1;
    l1.push_back(1);
    l1.push_back(2);
    l1.push_back(3);
    l1.push_back(4);
    l1.push_back(5);

    //将 l1中元素变为3个10。
    l1.assign(3, 10);
    print_list(l1);

    list<int> l2;
    l2.push_back(7);
    l2.push_back(8);
    l2.push_back(9);
    l2.push_back(10);

    //将l2中的从l2.begin()到l2.end()之间的数值赋值给l1
    l1.assign(l2.begin(), l2.end());
    print_list(l1);
}

clear():删除所有元素
empty():判断list是否为空,如果list是空的则返回true
erase(): 删除一个元素

    //将l1的第一个元素删除。
    l1.erase(l1.begin()); 
    // 将l1的从begin()到end()之间的元素删除
    l1.erase(l1.begin(), l1.end());

insert():插入一个元素到list中

    //在l1的开始位置插入100。
    l1.insert(l1.begin(), 100); 
    //在l1的开始位置插入2个100。
    l1.insert(l1.begin(), 2, 100); 
    //在l1的开始位置插入l2的从开始到结束的所有位置的元素
    l1.insert(l1.begin(), l2.begin(), l2.end());

max_size():返回list能容纳的最大元素大小

    list<int> l1;
    cout << l1.max_size() << endl;

这里写图片描述
merge():合并两个list

void test_list()
{
    list<int> l1;
    l1.push_back(1);
    l1.push_back(2);
    l1.push_back(3);
    print_list(l1);

    list<int> l2;
    l2.push_back(4);
    l2.push_back(5);
    l2.push_back(6);
    l1.merge(l2);
    print_list(l1);
    print_list(l2);
}

这里写图片描述
remove():从list删除指定元素,如果该元素存在,则将list中的所有该元素删除,如果不存在,则不发生任何变化

list<int> l1;
    l1.push_back(1);
    l1.push_back(4);
    l1.push_back(2);
    l1.push_back(4);
    l1.push_back(3);
    l1.push_back(4);
    print_list(l1);
    l1.remove(4);
    print_list(l1);
    l1.remove(40);
    print_list(l1);

这里写图片描述
resize():改变list的大小
reverse():把list的元素逆置
size():返回list中的元素个数
sort():给list排序
swap():交换两个list
unique():删除list中重复的元素

void test_list()
{
    list<int> l1;
    l1.push_back(3);
    l1.push_back(1);
    l1.push_back(2);
    l1.push_back(4);
    l1.push_back(4);
    l1.push_back(2);
    print_list(l1);

    list<int> l2;
    l2.push_back(4);
    l2.push_back(5);
    l2.push_back(6);

    //将l1大小改为8
    l1.resize(8);
    cout << l1.size() << endl;

     //逆置l1   
    l1.reverse();
    print_list(l1);

    //给l1排序
    l1.sort();
    print_list(l1);

    //交换l1和l2
    l1.swap(l2);
    print_list(l1);

    //删除l2中重复的元素
    l2.unique();
    print_list(l2);
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值