7.list

news/2025/2/8 15:45:31 标签: list, 数据结构, c++, 开发语言, 算法, 汇编

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

list_1">一、list的基本结构与使用

list_2">1.list的介绍

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

list_9">2.list的使用

list_10">(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_frontlist的第一个元素前面插入值为val的元素
pop_front删除list中第一个元素
push_backlist尾部插入值为val的元素
pop_back删除list中最后一个元素
insertlist的pos位置处插入值为val的元素
erase删除list的pos位置处的元素
swap交换两个list中的元素
clear清空list中的有效元素

listsortstd_66">(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.niftyadmin.cn/n/5845045.html

相关文章

【python自动化报错】StaleElementReferenceException

这两天在尝试自己编写增删改查的自动化测试脚本&#xff0c;发现执行到查看的时候会报错&#xff1a;StaleElementReferenceException&#xff0c;查了一下说可能是因为页面刷新导致历史定位失效&#xff0c;需要重新定位元素才能进行操作。解决的方法大概就是三种&#xff0c;…

kafka服务端之控制器

文章目录 概述控制器的选举与故障恢复控制器的选举故障恢复 优雅关闭分区leader的选举 概述 在Kafka集群中会有一个或多个broker&#xff0c;其中有一个broker会被选举为控制器&#xff08;Kafka Controler&#xff09;&#xff0c;它负责管理整个集群中所有分区和副本的状态。…

DeepSeek与人工智能的结合:探索搜索技术的未来

云边有个稻草人-CSDN博客 目录 引言 一、DeepSeek的技术背景 1.1 传统搜索引擎的局限性 1.2 深度学习在搜索中的优势 二、DeepSeek与人工智能的结合 2.1 自然语言处理&#xff08;NLP&#xff09; 示例代码&#xff1a;基于BERT的语义搜索 2.2 多模态搜索 示例代码&…

深入学习设计模式

创建型模式 单例模式 确保一个类只有一个实例&#xff0c;并提供全局访问点。 实现方式&#xff1a;懒汉式、饿汉式、双重校验锁等。 使用场景&#xff1a;配置管理器、线程池等。 工厂模式 通过工厂类创建对象&#xff0c;隐藏对象的创建细节。 简单工厂模式、工厂方法模式、抽…

RabbitMQ:windows最新版本4.0.5安装方案

前言 正在尝试学习RabbitMQ&#xff0c;因此考虑在windows上装一个最新版本来实验 关于安装&#xff0c;主要需要注意&#xff1a;先装与目标RabbitMQ版本对应的Erlang版本 这是官方给的对应版本兼容图&#xff1a; 我们需要安装4.0.5版本的RabbitMQ&#xff0c;则需要选择26.2…

android studio无痛入门

在Android Studio中创建和管理项目主要涉及以下几个步骤&#xff1a; 1. 创建新项目 打开Android Studio&#xff0c;点击“Start a new Android Studio project”或者“File” > “New” > “New Project”。 选择一个模板&#xff0c;例如“Empty Activity”&#xff0…

Redis Copilot:基于Redis为AI打造的副驾工具

我们最近发布了Redis Copilot&#xff0c;以帮助开发者更快地使用Redis构建应用。我们的使命是使应用程序快速运行&#xff0c;并简化构建过程。为此&#xff0c;Redis Copilot作为您的AI助手&#xff0c;能够让您更迅速地完成与Redis相关的任务。您今天就可以在Redis Insight中…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(四)

#作者&#xff1a;闫乾苓 系列前几篇&#xff1a; 《RabbitMQ 从入门到精通&#xff1a;从工作模式到集群部署实战&#xff08;一&#xff09;》&#xff1a;link 《RabbitMQ 从入门到精通&#xff1a;从工作模式到集群部署实战&#xff08;二&#xff09;》&#xff1a; lin…