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

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

相关推荐
2501_944526421 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 收藏功能实现
android·java·开发语言·javascript·python·flutter·游戏
jojo_zjx1 小时前
GESP 23年9月2级 小杨的X字矩阵
c++
fpcc1 小时前
跟我学C++中级篇——文件和目录
linux·c++
ouliten2 小时前
C++笔记:std::tuple
c++·笔记
云中飞鸿2 小时前
C#哪些类型需要 手动初始化
开发语言·c#
!停2 小时前
C语言文件操作
c语言·开发语言
小龙报2 小时前
【初阶数据结构】解锁顺序表潜能:一站式实现高效通讯录系统
c语言·数据结构·c++·程序人生·算法·链表·visual studio
历程里程碑2 小时前
Linux 1 指令(1)入门:6大基础指令详解
linux·运维·服务器·c语言·开发语言·数据结构·c++
少控科技6 小时前
QT新手日记024 - QT001程序代码
开发语言·qt