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;
}

迭代器相当于是一个指针

相关推荐
yufei-coder9 分钟前
C#基础语法
开发语言·c#·.net
长天一色9 分钟前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
yngsqq14 分钟前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#
sukalot18 分钟前
windows C++-windows C++-使用任务和 XML HTTP 请求进行连接(二)
c++·windows
_.Switch21 分钟前
Python机器学习模型的部署与维护:版本管理、监控与更新策略
开发语言·人工智能·python·算法·机器学习
醉颜凉23 分钟前
银河麒麟桌面操作系统修改默认Shell为Bash
运维·服务器·开发语言·bash·kylin·国产化·银河麒麟操作系统
NiNg_1_23429 分钟前
Vue3 Pinia持久化存储
开发语言·javascript·ecmascript
带带老表学爬虫38 分钟前
java数据类型转换和注释
java·开发语言
qianbo_insist40 分钟前
simple c++ 无锁队列
开发语言·c++
zengy541 分钟前
Effective C++中文版学习记录(三)
数据结构·c++·学习·stl