软件教程

首页 > 文章频道 > 软件教程

如何快速上手std::list常用函数

时间:2026-09-25 编辑:news

c++ stl中的std::list是基于双向链表实现的序列容器,和连续内存存储的vector不同,它支持常数时间复杂度的任意位置插入、删除操作,非常适合需要频繁修改节点内容的业务场景,新手只要掌握核心常用函数就能快速上手使用。

一、基础构造与初始化

std::list的初始化方式非常灵活,最常用的几种如下:默认构造可以创建一个空链表:`std::list my_list;`;如果需要初始化指定数量的相同元素,可以写`std::list my_list(5, 10);`,会生成一个包含5个值为10的节点的链表;c++11及之后支持直接用初始化列表构造:`std::list my_list {1, 3, 5, 7};`,适合已知初始元素的场景;此外还支持拷贝构造、范围构造,比如用数组片段初始化:`int arr[] = {2,4,6}; std::list my_list(arr, arr+3);`,满足不同场景的初始化需求。

二、核心增删操作

增删是std::list最常用的操作,头尾操作都是o(1)复杂度:`push_back(elem)`从链表尾部插入元素,`push_front(elem)`从头部插入,`pop_back()`/`pop_front()`分别删除尾部、头部元素。任意位置操作使用`insert(pos_it, elem)`,会在迭代器`pos_it`指向的节点前插入新元素,返回新元素的迭代器;删除操作对应`erase(it)`删除指定迭代器的节点,`remove(val)`会删除链表中所有值等于`val`的节点,这是非常实用的批量删除方法;最后可以用`clear()`清空整个链表,`empty()`判断链表是否为空,`size()`获取当前链表的元素数量,满足基础状态查询需求。

三、遍历与元素访问

std::list不支持随机访问,因此不能使用`[]`下标运算符或者`at()`函数访问任意位置元素,常规遍历可以用范围for,写法简洁直观:`for (auto num : my_list) { std::cout << num; }`,需要修改元素时加引用即可,写法为`for (auto& num : my_list)`,也可以用双向迭代器遍历,从`begin()`到`end()`逐个访问节点。只有头尾元素支持o(1)直接获取:`front()`返回头元素的引用,`back()`返回尾元素的引用,满足快速获取端点元素的需求。

四、常用工具函数

排序不需要使用标准库的通用`std::sort`,std::list自带适配链表结构的更高效成员函数`sort()`,默认升序排序,传入比较器即可实现自定义排序,比如降序可以写`my_list.sort(std::greater());`;去重要用`unique()`,注意需要先排序再调用`unique()`才能移除所有重复元素;最有特色的是`splice()`函数,可以o(1)时间将另一个list的节点拼接到当前链表的指定位置,不需要重新分配内存,非常高效,比如`my_list.splice(my_list.begin(), another_list)`就可以把another_list整个拼到my_list的头部。

掌握以上这些常用函数,就能覆盖绝大多数std::list的使用场景,快速发挥双向链表在频繁修改场景下的性能优势,全文约790字。

查看

软件教程

河南人事考试网唯一官方网站在哪

随着河南省公务员招录、事业单位招聘、职业资格考试等各类人事招考工作常态化开展,河南人事考试网成为千万考生获取招考信息、完成报名笔试相关操作的核心渠道。不过近年来,仿冒官方网站的诈骗事件频发,不少考生因为误进虚假网站遭遇信息泄露或财产损失,明确认准唯一官方,是考

2026-09-18 【新闻资讯】

推荐下载

安卓定位软件,手机定位即利用手机定位装置通过卫星进行精确定位,现在这个功能可谓是在手机领域发扬光大,除了基本的定位之外莫过于现在聊天软件的定位功能,微信、陌陌...这里介绍的是具有定位功能的地图软件,很实用,你可以免费下载!

PS技术已经和普通人的生活密不可分了,出门旅行或者是随手即拍的生活照不一定是最适合当时的构图还有光线条件的,这就需要自己手动来精修;一款好的PSAPP拥有各种不同的修图方式,多重滤镜展现奇妙的场景变化,专业模式调校让所有的元素都恰到好处。