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

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

相关推荐
2401_892070981 天前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
yuzhuanhei1 天前
Visual Studio 配置C++opencv
c++·学习·visual studio
Wenweno0o1 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
cch89181 天前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳1 天前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发1 天前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense1 天前
设计模式之工厂模式
java·开发语言·设计模式
‎ദ്ദിᵔ.˛.ᵔ₎1 天前
STL 栈 队列
开发语言·c++
勿忘,瞬间1 天前
数据结构—顺序表
java·开发语言