【C++初阶】list
**C++ 初阶:List**
在 C++ 中,`std::list` 是一种动态序列容器,它支持双向链表的结构。相比于其他类型的容器,如 `std::vector` 和 `std::deque`,`std::list` 在插入和删除元素时具有更好的性能。
**什么是List?**
一个 List(列表)是一种线性数据结构,它由一系列零散的结点组成,每个结点包含一个值和一个或多个指向相邻结点的引用。List 的每个结点都有两个指针:一个指向前一个结点,另一个指向后一个结点。
**List 的特性**
1. **动态大小**: List 的大小可以动态变化,不需要事先分配固定大小的内存。
2. **双向链表结构**: List 支持双向链表的结构,每个结点都有两个指针,分别指向前一个和后一个结点。
3. **插入和删除元素时性能好**: List 在插入和删除元素时,可以直接修改相应结点的指针,不需要移动其他结点。
**List 的使用场景**
1. **频繁插入或删除元素**: 当程序需要频繁插入或删除元素时,List 是一个合适的选择。
2. **需要快速找到中间元素**: List 支持双向链表结构,可以快速找到中间元素。
3. **需要动态大小**: 当程序需要动态调整容器大小时,List 是一个合适的选择。
**C++ 中的 List**
在 C++ 中,`std::list` 是一种模板类,它支持双向链表的结构。`std::list` 提供了以下成员函数:
* `push_back()`: 在结尾插入元素。
* `push_front()`: 在头部插入元素。
* `pop_back()`: 删除结尾元素。
* `pop_front()`: 删除头部元素。
* `insert()`: 插入指定位置的元素。
* `erase()`: 删除指定位置的元素。
**示例代码**
cpp#include <iostream> #include <list> int main() { // 创建一个 List std::list<int> myList; // 在结尾插入元素 myList.push_back(10); myList.push_back(20); myList.push_back(30); // 输出 List 中的元素 for (auto it = myList.begin(); it != myList.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; // 在头部插入元素 myList.push_front(5); myList.push_front(15); // 输出 List 中的元素 for (auto it = myList.begin(); it != myList.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; // 删除结尾元素 myList.pop_back(); // 输出 List 中的元素 for (auto it = myList.begin(); it != myList.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; return0; }
**注释**
* `std::list` 是一种模板类,它支持双向链表的结构。
* `push_back()` 和 `push_front()` 函数用于在结尾和头部插入元素。
* `pop_back()` 和 `pop_front()` 函数用于删除结尾和头部元素。
* `insert()` 和 `erase()` 函数用于插入和删除指定位置的元素。
**总结**
`std::list` 是一种动态序列容器,它支持双向链表的结构。相比于其他类型的容器,如 `std::vector` 和 `std::deque`,`std::list` 在插入和删除元素时具有更好的性能。`std::list` 的使用场景包括频繁插入或删除元素、需要快速找到中间元素以及需要动态大小等情况。在 C++ 中,`std::list` 提供了成员函数如 `push_back()`、`push_front()`、`pop_back()`、`pop_front()`、`insert()` 和 `erase()` 等用于操作 List。示例代码展示了如何使用这些成员函数来插入和删除元素,以及输出 List 中的元素。