list链表
在 C++ 中,list 是一种序列容器,它实现了双向链表。与 vector 或 array 相比,list 在插入和删除操作(尤其是在链表的中间)时提供了更好的性能,因为它不需要重新分配内存或移动现有元素。
以下是关于 C++ list 的一些基本特点和用法:
特点
- 双向链表:每个元素都包含一个指向前一个元素和后一个元素的指针。
- 动态大小:可以在运行时动态地改变大小,不需要在创建时指定大小。
- 随机访问慢:不支持快速随机访问,访问任何元素都需要从头开始遍历。
- 插入和删除快:在链表中间插入或删除元素非常快,时间复杂度为 O(1)。
头文件
为了使用 list,需要包含 <list> 头文件。
#include <list>
创建
std::list<int> lst; // 创建一个空的 list 容器
std::list<int> lst2 = {1, 2, 3}; // 创建一个初始值为 {1, 2, 3} 的 list 容器
常用成员函数
push_back(value): 在链表末尾添加一个新元素。push_front(value): 在链表开头添加一个新元素。pop_back(): 删除链表末尾的元素。pop_front(): 删除链表开头的元素。begin(): 返回指向链表第一个元素的迭代器。end(): 返回指向链表最后一个元素之后位置的迭代器。size(): 返回链表中的元素数量。empty(): 检查链表是否为空。clear(): 清空链表中的所有元素。sort(): 对链表中的元素进行排序。reverse(): 反转链表中的元素顺序。
示例
下面是一个使用 list 的简单示例:
#include <iostream>
#include <list>
int main() {
std::list<int> lst = {3, 1, 4, 1, 5, 9};
// 添加元素
lst.push_back(2);
lst.push_front(6);
// 遍历并打印链表
for (int value : lst) {
std::cout << value << ' ';
}
std::cout << std::endl;
// 删除元素
lst.pop_back();
lst.pop_front();
// 再次遍历并打印链表
for (const auto& value : lst) {
std::cout << value << ' ';
}
std::cout << std::endl;
// 排序
lst.sort();
// 再次遍历并打印链表
for (const auto& value : lst) {
std::cout << value << ' ';
}
std::cout << std::endl;
return 0;
}
输出结果将会是:
6 3 1 4 1 5 9 2
3 1 4 1 5 9 2
1 1 2 3 4 5 9
请注意,由于 list 不支持随机访问,所以不能使用下标运算符([])来访问元素。您需要使用迭代器或范围 for 循环来遍历元素。
更多信息可以去看https://blog.youkuaiyun.com/weixin_44668898/article/details/102154927?fromshare=blogdetail&sharetype=blogdetail&sharerId=102154927&sharerefer=PC&sharesource=Qhumaing&sharefrom=from_link
注
- list用二分法查找之前应按sort()默认升序排列,而greater()是降序。

被折叠的 条评论
为什么被折叠?



