list使用

list 带头双向循环。
list文档

insert 是在pos位置前面插入,pos是一个迭代器位置。

vector insert/erase 会失效

list insert 不会失效, erase 会失效

clear 不会清除哨兵位节点。

splice:splice可以在自己的链表上操作,也可以把别的链表的部分转移到这个链表上。splice = transfers 转移 把一个链表中某些节点转移到别的位置去。转移是把链表的某些部分转移到让它去的位置的后面。如果把 lt1 转移到 lt2 上面,则 lt1 就没有节点了。

链表的排序效率比较差,链表底层用的归并排序。数据量大不要使用 list 排序。

cpp 复制代码
int main()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	list<int>::iterator it = lt.begin();
	while (it != lt.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;
	
	lt.reverse();
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	// lt.sort(greater<int>()) 仿函数 排降序。
	lt.sort();
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	list<int> lt2;
	lt.sort();
	lt2.sort();
	lt.merge(lt2); // lt和lt2都得有序才能合并在一起 merge:合并

	// unique 去重
	lt.sort();
	lt.unique(); //去重前也得排序。

	//remove 相当于find + erase 得先找到val才能去删除。

	// splice = transfers 转移 把一个链表中某些节点转移到别的位置去
	// 把lt的lt.begin() 这个节点转移到lt.end()这个位置去。
	lt.splice(lt.end(), lt, lt.begin());
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	
	return 0;
}
相关推荐
郝学胜-神的一滴3 分钟前
深度学习优化核心:梯度下降与网络训练全解析
数据结构·人工智能·python·深度学习·算法·机器学习
Je1lyfish29 分钟前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
会编程的土豆6 小时前
【数据结构与算法】空间复杂度从入门到面试:不仅会算,还要会解释
数据结构·c++·算法·面试·职场和发展
RH2312119 小时前
2026.4.29数据结构 直接插入排序&&希尔排序
数据结构·算法·排序算法
khalil102013 小时前
代码随想录算法训练营Day-41动态规划08 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III
数据结构·c++·算法·leetcode·动态规划
无限进步_13 小时前
【C++】AVL树完全解析:从平衡因子到四种旋转
c语言·开发语言·数据结构·c++·后端·算法·github
浅念-14 小时前
LeetCode最短路必看:BFS算法原理+经典题解
数据结构·c++·算法·leetcode·职场和发展·bfs·宽度优先
流年如夢14 小时前
顺序表的应用 --> 简单通讯录的实现
c语言·数据结构
如君愿14 小时前
考研复习 Day 31 | 习题--计算机网络 第五章(运输层 中)、数据结构 图 (中)
数据结构·计算机网络·课后习题
代码地平线15 小时前
【数据结构】二叉树详解:全代码逐行解析+6道LeetCode高频OJ题图解
数据结构·算法·leetcode