当前位置: 首页 > article >正文

7.list

本篇博客梳理C++的STL中的list容器

一、list的基本结构与使用

1.list的介绍

list的底层是带头循环双向链表
list的结构
带头:含哨兵位
循环:尾节点的next指针指向哨兵位
双向:每个节点具有两个指针域,一个指针指向前一个结点

2.list的使用

(1)list的构造函数

构造函数接口说明
list (size_type n, const value_type& val = value_type()用n个val值构造list
list()构造空的list
list(const list& x)拷贝构造
list(InputIrerator first,InputIrerator last)用(first,last)区间中的元素来构造list

(2)迭代器

函数声明接口说明
begin/end返回第一个元素的迭代器/返回最后一个元素下一个位置的迭代器
rbegin/rend返回第一个元素的位置(即end处)/返回最后一个元素的下一个位置(即begin)

迭代器的分类:
① 功能上
功能上的分类

② 性质上

性质上的分类
实际上,迭代器的性质由STL的底层结构决定
单向迭代器:只支持单向遍历
双向迭代器:支持双向遍历,支持++和–,但不支持一下子+或者-多个单位
随机迭代器:支持随机访问,也就是既支持++和–,也支持+n和-n

(3)容量相关函数

函数声明接口说明
empty检查list是否为空,是则返回true,不是则返回false
size返回list中有效元素的个数

(4)头,尾元素的访问

函数声明接口说明
front返回list第一个值的引用
back返回list最后一个值的引用

(5)增删查改

函数声明接口说明
push_front在list的第一个元素前面插入值为val的元素
pop_front删除list中第一个元素
push_back在list尾部插入值为val的元素
pop_back删除list中最后一个元素
insert在list的pos位置处插入值为val的元素
erase删除list的pos位置处的元素
swap交换两个list中的元素
clear清空list中的有效元素

(6)list支持的sort函数(std标准库库里面没支持)

sort函数

#include <iostream> 
using namespace std;
#include <vector> 
#include <list>
int main()
{
	vector<int> v = { 6,3,7,8,3,5,8,1,2,9 };
	list<int> lt(v.begin(), v.end());

	lt.sort();//默认排成升序
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	greater<int> gt;
	lt.sort(gt);//排成降序
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	less<int> ls;
	lt.sort(ls);//排成升序
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

运行结果

(7)merge函数:合并两个有序链表

#include <iostream> 
using namespace std;
#include <list>

int main()
{
	list<int> lt1;
	lt1.push_back(3);
	lt1.push_back(4);
	lt1.push_back(2);
	lt1.sort();

	list<int> lt2;
	lt2.push_back(8);
	lt2.push_back(7);
	lt2.push_back(9);
	lt2.sort();

	lt1.merge(lt2);
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	return 0;
}

运行结果
注意,此时lt2已经被清空


http://www.kler.cn/a/536290.html

相关文章:

  • 集成Google Maps页面提示[For development purposes only]解决方案
  • 微软发布基于PostgreSQL的开源文档数据库平台DocumentDB
  • (苍穹外卖)项目结构
  • tolua[一]框架搭建,运行example
  • Win32 学习笔记目录
  • 游戏引擎 Unity - Unity 打开项目、Unity Editor 添加简体中文语言包模块、Unity 项目设置为简体中文
  • Kotlin协程详解——协程取消与超时
  • 博主卖DeepSeek相关课程1天收入50000元
  • 鸿蒙北向开发OpenHarmony4.1 DevEco Studio开发工具安装与配置
  • python学习过程中,Scrapy爬虫和requests库哪个更适合新手?
  • 在 MySQL 8 中配置主从同步(主从复制)是一个常见的需求,用于实现数据的冗余备份、读写分离等。
  • 前端知识速记--JS篇:柯里化
  • shell脚本的一些学习笔记----(一)
  • python编程-类结构,lambda语法,原始字符串
  • ROS2从入门到精通3-1:详解urdf语法并自定义机器人
  • c#中Thread.Join()方法的经典示例
  • 轻量化开发实践!Code Server在香橙派Zero3上的完美运行与配置方案
  • 市场柱线-机器人-《广东省建设现代化产业体系2025年行动计划》-提到大力发展人形机器人等具身智能机器人
  • bigemap pro如何裁剪栅格数据?
  • 路由器如何进行数据包转发?
  • 【LeetCode】152、乘积最大子数组
  • 音频进阶学习十一——离散傅里叶级数DFS
  • PostGIS:使用shp2pgsql、pgsql2shp、OGR2OGR函数进行数据导入、导出
  • 基础篇05-图像直方图操作
  • OpenHarmony上运行Ollama玩转本地大模型
  • React 与 Next.js