C++ STL 容器list详解:插入、删除与操作

0 下载量 82 浏览量 更新于2024-09-01 收藏 71KB PDF 举报
"这篇资料主要涵盖了C++ STL容器list的总结,包括其特点、操作方法以及一些常用成员函数的介绍。" 在C++编程中,STL(Standard Template Library,标准模板库)提供了多种容器来存储和管理数据,其中`std::list`是一个重要的容器,它实现了一个双向链表。由于链表的特性,`std::list`在插入和删除元素时具有较高的效率,特别是对于频繁进行这些操作的情况。 `std::list`不支持随机访问,这意味着不能像数组那样通过索引快速访问元素。它提供了两种遍历方式:通过迭代器(`std::list<>::iterator`)进行逐个访问,或者通过索引(但不是直接访问,而是通过特定的成员函数如`front()`和`back()`,以及`push_front()`和`push_back()`等来操作)。 在构造`std::list`时,有多种方式: 1. 创建一个空的list:`list<Elem>c` 2. 复制另一个list:`list<Elem>c1(c2)` 3. 创建包含n个默认构造元素的list:`list<Elem>c(n)` 4. 创建包含n个相同元素的list:`list<Elem>c(n,elem)` 5. 由迭代器范围创建list:`list<Elem>c(begin,end)` `std::list`的一些关键成员函数包括: - `size()`: 返回list中的元素数量。 - `swap(c2)`: 交换两个list的元素。 - `empty()`: 检查list是否为空。 - `max_size()`: 获取list能容纳的最大元素数量。 - `resize(num)`: 改变list的大小,如果需要,会添加或删除元素。 - `reverse()`: 反转list中的元素顺序。 - `sort()`: 对list进行排序,可以自定义比较函数。默认是升序排序,例如`L1.sort();`和`L1.sort(greater<int>());`分别表示升序和降序排序。 - `merge()`: 合并两个已排序的list,保持排序顺序。例如,`list1.merge(list2);`将使`list2`清空并将其元素合并到`list1`中。 - `splice()`: 结合两个list,有三个重载版本,其中一个会清空第二个list。例如,`list1.splice(list1.end(), list2);`将`list2`的所有元素移到`list1`的末尾,并清空`list2`。 此外,`std::list`还提供了其他操作,如`push_back()`, `push_front()`, `pop_back()`, `pop_front()`, `insert()`, `erase()`等,用于在链表的头部或尾部添加和移除元素,以及在任意位置插入和删除元素。 `std::list`是一个适合动态调整大小且高效插入删除的容器,特别适用于需要频繁改变元素顺序或需要双向遍历的应用场景。了解并熟练掌握`std::list`的用法对于C++开发者来说至关重要,因为它能帮助编写更加高效和灵活的代码。