C++ 集合 list 使用

list 是一个双向链表容器,它允许在任意位置进行高效的插入和删除操作。

list 的基本特性

双向链表list 中的每个元素都包含指向前一个和后一个元素的指针,这使得在链表中的任何位置进行插入和删除操作都非常高效。

动态大小list 可以根据需要动态地增长和缩小。

常数时间插入和删除 :在list 的任意位置进行插入和删除操作的时间复杂度都是常数时间(O(1))。

非随机访问 :由于list 是链表结构,因此不支持随机访问元素。你不能像访问数组那样通过索引直接访问list 中的元素。相反,你需要使用迭代器来遍历list

list 的基本操做

创建一个空的 list

cpp 复制代码
list<int> mylist;

在 list 的末尾插入元素

cpp 复制代码
mylist.push_back(1);

在 list 的前部插入元素

cpp 复制代码
mylist.push_front(4);

遍历输出 list 中的元素

cpp 复制代码
for (auto it = mylist.begin();it!=mylist.end();it++) {
		cout << *it << " ";
}

反向迭代器

cpp 复制代码
for (auto it = mylist.rbegin(); it != mylist.rend(); it++) {
		cout << *it << " ";
}

删除最后一个元素

cpp 复制代码
mylist.pop_back();

删除第一个元素

cpp 复制代码
mylist.pop_front();

获取指定下标的元素(指定下标1)

cpp 复制代码
list<int>::iterator it = mylist.begin();
advance(it,1);// 将迭代器前进1个单元,或者用it++;

在指定位置插入元素(指定下标2)

cpp 复制代码
//在位置 2 插入元素 3
list<int>::iterator it = mylist.begin();
std::advance(it, 2); // it 现在指向元素 4
mylist.insert(it,3);

完整示例

cpp 复制代码
#include <iostream>
#include <list>
using namespace std;

int main() {
	// 创建一个空的 list
	list<int> mylist;
	// 在 list 的末尾插入元素
	mylist.push_back(1);
	mylist.push_back(2);
	mylist.push_back(3);

	//在 list 的前部插入元素
	mylist.push_front(4);
	mylist.push_front(5);

	// 遍历输出 list 中的元素
	for (auto it = mylist.begin();it!=mylist.end();it++) {
		cout << *it << " ";
	}

	//删除最后一个元素
	mylist.pop_back();

	//删除第一个元素
	mylist.pop_front();

	//反向迭代器
	cout << endl;
	for (auto it = mylist.rbegin(); it != mylist.rend(); it++) {
		cout << *it << " ";
	}

	// 再次输出 list 中的元素
	cout << endl;
	for (auto it = mylist.begin(); it != mylist.end(); it++) {
		cout << *it << " ";
	}

	//获取下标为1的元素
	cout << endl;
	list<int>::iterator it = mylist.begin();
	advance(it,1);// 将迭代器前进1个单元,或者用it++;
	cout << *it << " ";
	
	//在位置 2 插入元素 3
	it = mylist.begin();
	std::advance(it, 2); // it 现在指向元素 4
	mylist.insert(it,3);

	// 再次输出 list 中的元素
	cout << endl;
	for (auto it = mylist.begin(); it != mylist.end(); it++) {
		cout << *it << " ";
	}

	return 0;
}
相关推荐
研究点啥好呢7 分钟前
dji机器人SLAM算法工程师 面试题精选:10道高频考题+答案解析
c++·算法·机器人·slam·dji
jllllyuz10 分钟前
VC++ 读写 Excel 文件实现
开发语言·c++·excel
小小编程能手11 分钟前
C++文件从操作:
开发语言·c++
茉莉玫瑰花茶15 分钟前
C++ 17 详细特性解析(6)
开发语言·c++
东方.既白17 分钟前
QML与C++炫酷界面交互DEMO
开发语言·c++·交互
承渊政道19 分钟前
【贪心算法】(经典实战应用解析(一):柠檬水找零、将数组和减半的最少操作次数、最大数、摆动序列)
数据结构·c++·学习·算法·leetcode·贪心算法·排序算法
少司府26 分钟前
C++基础入门:vector深度解析(七千字深度剖析)
c语言·开发语言·数据结构·c++·容器·vector·顺序表
计算机安禾30 分钟前
【c++面向对象编程】第8篇:const成员与mutable:常对象与常函数
开发语言·javascript·c++
草莓熊Lotso2 小时前
【Linux网络】UDP Socket 编程全解析:从回显服务到通用字典服务,从零实现工业级代码
linux·运维·服务器·数据库·c++·单片机·udp
飞鸿踏雪(蓝屏选手)8 小时前
137 ≤ Chrome 主密钥获取研究
c++·chrome·windows·网络安全·逆向分析