C++ list类容器常用操作

文章目录

list本质就是链表。

初始化

  初始化操作。

cpp 复制代码
list<int> lt;

list空间增长

size

  返回list中有效节点的个数。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.size();

empty

  检测list是否为空,是返回true,否则返回false。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.empty();

list元素存取

front

  返回list的第一个节点中值的引用。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
cout << lt.front() << endl;  //1

back

  返回list的最后一个节点中值的引用。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
cout << lt.back() << endl;  //3

list常用函数

push_front

  在list首元素前插入值val的元素。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_front(0); // 0 1 2 3

pop_front

  删除list中第一个元素。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.pop_front(); // 2 3

push_back

  在list尾部插入值为val的元素。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
 // 1  2 3

pop_back

  删除list中最后一个元素。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.pop_back(); // 1  2 

insert

  在list position位置中插入值为val的元素,会返回list position位置的迭代器。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
auto it = find(lt.begin(), lt.end(), 2);
lt.insert(it, 9); // 1 9 2 3

  在list position位置的下一个位置中插入值为val的元素。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
auto it = find(lt.begin(), lt.end(), 2);
lt.insert(next(it), 9); // 1 2  9 3

erase

  删除list position位置的元素,删除完之后,会返回下一个位置的迭代器。

cpp 复制代码
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
auto it = find(lt.begin(), lt.end(), 2);
lt.erase(it); // 1 3

swap

  交换两个list中的元素。

cpp 复制代码
list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);
list<int> lt2;
lt2.push_back(10);
lt2.push_back(9);
lt2.push_back(8);
swap(lt1, lt2);

clear

  清空list中的有效元素。

cpp 复制代码
list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);

lt1.clear();
cout << lt1.size() << endl;  //0

链表中的sort

  链表的排序效率相比vector较差,当数据足够多的时候。可以将链表中的值拷贝到vector中,排完序后在拷贝回链表中。

cpp 复制代码
void test_list() {
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	lt.push_back(5);
	lt.push_back(4);
	lt.push_back(5);

	lt.sort();
	for (auto& e : lt) {
		cout << e << " ";
	}
	// 1 1 2 2 3 3 4 4 5 5
	cout << endl;
	//链表的排序效率相比vector较差,当数据足够多的时候。可以将链表中的值拷贝到vector中
	//排完序后在拷贝回链表中
	lt.sort(greater<int>());
	for (auto& e : lt) {
		cout << e << " ";
	}
	//5 5 4 4 3 3 2 2 1 1
	cout << endl;
}

reverse

  进行逆置。

cpp 复制代码
void test_list4() {
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	lt.push_back(5);

	lt.reverse();
	for (auto& e: lt) {
		cout << e << " ";
	}
	//5 4 3 2 1
	cout << endl;
}

merge

  将两个链表进行合并。

cpp 复制代码
void test_list() {
	list<int> first; 
	first.push_back(1);
	first.push_back(2);
	first.push_back(3);

	list<int> second;
	second.push_back(4);
	second.push_back(5);
	second.push_back(6);

	first.merge(second);
	for (auto& e : first) {
		cout << e << " ";
	}
	//1 2 3 4 5 6
	cout << endl;
}

unique

  要求列表有序,去重

cpp 复制代码
void test_list() {
	list<int> lt;
	lt.push_back(1);
	lt.push_back(1);
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	//要求列表有序 去重
	lt.unique();
	for (auto& e : lt) {
		cout << e << " ";
	}
	//1 2 3
	cout << endl;
}

remove

  删除列表中出现的所有val值。

cpp 复制代码
void test_list7() {
	list<int> lt;
	lt.push_back(1);
	lt.push_back(1);
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.remove(1);
	for (auto& e : lt) {
		cout << e << " ";
	}
	//2 3
	cout << endl;
}

splice

  在特定的位置拼接两个链表。

cpp 复制代码
void test_list8() {
	list<int> lt1;
	lt1.push_back(1);
	lt1.push_back(1);
	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);

	list<int> lt2;
	lt2.push_back(9);
	lt2.push_back(10);
	lt2.push_back(11);
	lt2.push_back(12);
	lt2.push_back(13);

	auto it = lt1.begin();
	++it;
	lt1.splice(it, lt2);
	for (auto& e : lt1) {
		cout << e << " ";
	}
	//将lt2转移到lt1的第二个位置开始
	//1 9 10 11 12 13 1 1 2 3

	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	lt.push_back(5);
	lt.push_back(6);
	int x = 2;

	it = find(lt.begin(), lt.end(), x);
	if (it != lt.end()) {
		//        目标位置    表示移动元素的来源链表   要移动范围的起始迭代器   要移动范围的结束迭代器
		lt.splice(lt.begin(), lt, it, lt.end());
	}
	for (auto& e : lt) {
		cout << e << " ";
	}// 2 3 4 5 6 1
}

list支持直接传构造的参数 emplace_back

cpp 复制代码
class A {
public:
	A(int a1 = 1, int a2 = 1)
		:_a1(a1),
		_a2(a2)
	{}

private:
	int _a1;
	int _a2;
};

void test_list() {
	list<A> lt;
	A aa1(1, 1);
	lt.emplace_back(aa1);
	lt.emplace_back(A(2, 2));
	//支持直接传构造A对象的参数
	lt.emplace_back(3, 3);
}

觉得我回答有用的话,记得点个关注哟!谢谢支持!

相关推荐
hold?fish:palm44 分钟前
9 找到字符串中所有字母异位词
c++·算法·leetcode
小大宇1 小时前
python flask框架 SSE流式返回、跨域、报错
开发语言·python·flask
柒星栈1 小时前
PHP 源码怎么加密防破解?三套方案实战指南
开发语言·php·android studio
勉灬之2 小时前
Next.js + Prisma 跨平台部署踩坑记
开发语言·javascript·ecmascript
这是个栗子2 小时前
前端开发中的常用工具函数(九)
开发语言·javascript·ecmascript·at
啦啦啦啦啦zzzz2 小时前
算法:回溯算法
c++·算法·leetcode
蓝创工坊Blue Foundry2 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
会飞的小新2 小时前
C 标准库之 <fenv.h> 详解与深度解析
c语言·开发语言·microsoft
Lzg_na2 小时前
订阅发布模块事例
c++
郝学胜-神的一滴2 小时前
[简化版 GAMES 104] 现代游戏引擎 02:拆解现代游戏引擎5+1层级架构,吃透引擎底层核心逻辑
c++·unity·架构·游戏引擎·图形渲染·unreal engine·系统设计