C++学习:list

1.list的定义和结构

list的使用频率不高,在做题时几乎遇不到需要使用list的情景。list是一种双向链表容器,它是标准模板库(STL)提供的一种序列容器。list容器以节点(node的形式存储元素,并使用指针将这些节点链接在一起,形成一个链表结构。list容器结构如下:

list容器模板接受两个参数:

1.T:指定容器中存储的元素类型。 list<int>

2.Allocator(可选):指定用于分配内存的分配器类型,默认为std::allocator<T>
一般不用填

list容器的特点包括:·双向性:每个节点都包含指向前一个节点和后一个节点的指针,因此可以在常数时间内在链表中的任意位置进行插入、删除和访问操作。动态大小:链表的大小可以根据需要动态扩展或收缩,不需要预先指定容器的大小。

不连续存储:链表中的节点可以在内存中的任意位置分布,不要求连续存储,因此插入和删除操作不会导致元素的移动 。如 1 22 33 35 63...

list容器提供了一系列成员函数和迭代器来操作和访问链表中的元素,包括插入删除、访问、反转等操作。可以使用迭代器来遍历链表中的元素。

c++ 复制代码
#include <iostream>
#include<list>
int main(){
	std::list<int> mylist;
// 在链表尾部插入元素
	myList.push_back(1);
	myList.push_back(2);
	myList.push_back(3);
// 在链表头部插入元素myList.push front(@);
//遍历链表并输出元素
	for(int num :myList)
	{std::cout<< num << " ";}
	std::cout << std::endl;
	return 0;
}

在上述示例中,我们首先创建了一个list容器myList,然后使用push_back()和push_front()函数分别在链表尾部和头部插入元素。最后,使用范围基于范围的for循环遍历链表并输出元素。需要注意的是,由于list是双向链表,因此插入和删除操作的时间复杂度是常量时间O(1),但访问和查找操作的时间复杂度是线性时间O(n),其中n是链表的大小。因此,如果需要频繁进行随机访问操作,可能更适合使用支持随机访问的容器,如vector或deque(双端队列)

list容器提供了多个常用的成员函数来操作和访问链表中的元素以下是一些常用的list函数的解释:

1.push_back():将元素插入到链表的末尾。

2.push front():将元素插入到链表的开头。

3.pop back():移除链表末尾的元素。

4.pop front():移除链表开头的元素。

5.size():返回链表中元素的个数。

6.empty():检查链表是否为空。

7.clear():清空链表中的所有元素。

8.front():返回链表中第一个元素的引用。

9.back():返回链表中最后一个元素的引用。

10.begin():返回指向链表第一个元素的迭代器。

11.end():返回指向链表末尾的下一个位置的迭代器。

12.insert():在指定位置之前插入一个或多个元素。

13.erase():从链表中移除指定位置的一个或多个元素。

c++ 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(void) {
	//创建一个list<int>对象myList
	list<int>myList;
	//向myList尾部添加元素
	for (int i = 1; i <= 5; ++i)
		myList.push_back(i);


	//从头到尾输出myList中的元素
	for (const auto& i : myList)
		cout << i << ' ';
	cout << '\n';


	//将mylist中的元素反转
	reverse(myList.begin(), myList.end());


	for (const auto& i : myList)
		cout << i << ' ';
	cout << '\n';


	//在第一个元素的后一个位置加上元素0
	myList.insert(++myList.begin(), 0);

	for (const auto& i : myList)
		cout << i << ' ';
	cout << '\n';

	myList.erase(++++myList.begin(), --myList.end());
	//输出myList的大小
	cout << "链表大小为:" << myList.size() << '\n';

		//从头到尾输出myList中的元素
	for (const auto& i : myList)
		cout << i << ' ';
		cout << '\n';
	return 0;
}

迭代器相当于是一个指针

相关推荐
lqjun082728 分钟前
Qt程序单独运行报错问题
开发语言·qt
Hello_Embed34 分钟前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中1 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Magnetic_h2 小时前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
hdsoft_huge2 小时前
Java & Spring Boot常见异常全解析:原因、危害、处理与防范
java·开发语言·spring boot
风中的微尘2 小时前
39.网络流入门
开发语言·网络·c++·算法
研梦非凡3 小时前
ICCV 2025|从粗到细:用于高效3D高斯溅射的可学习离散小波变换
人工智能·深度学习·学习·3d
未来之窗软件服务3 小时前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟
混分巨兽龙某某3 小时前
基于Qt Creator的Serial Port串口调试助手项目(代码开源)
c++·qt creator·串口助手·serial port
小冯记录编程3 小时前
C++指针陷阱:高效背后的致命危险
开发语言·c++·visual studio