C++ List 容器
什么是List容器?
List容器是C++ STL(标准模板库)中提供的一种序列式容器,它实现了一个双向链表(doubly linked list)。与vector等基于数组的容器不同,list容器中的元素在内存中并不是连续存储的,而是通过指针相互连接形成链表结构。
备注
List容器的每个元素都包含一个值和两个指针,这两个指针分别指向前一个元素和后一个元素。
List的特点
List容器与其他STL容器相比具有以下特点:
- 高效的插入和删除操作:在list的任何位置插入或删除元素都是常数时间O(1)的操作。
- 不支持随机访问:不能像数组那样通过下标直接访问元素,必须通过迭代器逐个遍历 。
- 占用空间较大:由于需要存储前后指针,所以比vector等容器占用更多内存。
- 不支持元素排序的随机访问算法:如
std::sort
,但提供了自己的排序方法sort()
。
如何使用List容器
包含必要的头文件
#include <list>
#include <iostream>
创建List容器
// 创建一个空的整型list
std::list<int> myList;
// 创建具有5个元素的list,每个元素都初始化为100
std::list<int> myList2(5, 100);
// 使用初始化列表创建list
std::list<int> myList3 = {1, 2, 3, 4, 5};
// 使用另一个list初始化
std::list<int> myList4(myList3);
基本操作
添加元素
std::list<int> myList;
// 在末尾添加元素
myList.push_back(10);
myList.push_back(20);
// 在开头添加元素
myList.push_front(5);
// 在指定位置插入元素
auto it = myList.begin();
++it; // 移动到第二个元素
myList.insert(it, 15);
执行上述代码后,myList的内容为:5, 15, 10, 20
删除元素
std::list<int> myList = {1, 2, 3, 4, 5};
// 删除第一个元素
myList.pop_front();
// 删除最后一个元素
myList.pop_back();
// 删除特定值的元素
myList.remove(3);
// 使用条件删除元素
myList.remove_if([](int n){ return n % 2 == 0; }); // 删除所有偶数
执行上述代码后,myList的内容为:5
(只剩下5)
访问元素
std::list<int> myList = {10, 20, 30, 40, 50};
// 访问第一个元素
int first = myList.front();
// 访问最后一个元素
int last = myList.back();
// 通过迭代器访问元素
for (auto it = myList.begin(); it != myList.end(); ++it) {
std::cout << *it << " ";
}
输出:
10 20 30 40 50