stl链表(stl链表打印)
## STL链表
简介
STL (Standard Template Library) 提供了多种容器,其中链表是一种常用的线性数据结构。STL 链表以双向链表的形式实现,允许在链表的任意位置高效地进行插入和删除操作。 与数组或`vector`相比,链表在插入和删除元素时无需移动其他元素,从而提高了效率,尤其是在频繁进行插入和删除操作的情况下。然而,链表的随机访问效率较低,需要遍历链表才能访问特定位置的元素。### 1. STL链表的类型:`std::list`STL 提供的链表类型是 `std::list`,它定义在 `` 头文件中。 `std::list` 是一个模板类,可以存储各种数据类型的元素。### 2. `std::list` 的主要成员函数以下列出一些常用的 `std::list` 成员函数:#### 2.1 构造函数
`list()`: 创建一个空的链表。
`list(size_type n, const value_type& val)`: 创建一个包含 `n` 个值为 `val` 的元素的链表。
`list(const list& x)`: 复制构造函数,创建一个与 `x` 相同的链表。
`list(InputIterator first, InputIterator last)`: 从迭代器范围 `[first, last)` 创建一个链表。#### 2.2 插入元素
`push_back(const value_type& val)`: 在链表尾部插入一个元素。
`push_front(const value_type& val)`: 在链表头部插入一个元素。
`insert(iterator pos, const value_type& val)`: 在迭代器 `pos` 指示的位置插入一个元素。
`insert(iterator pos, size_type n, const value_type& val)`: 在迭代器 `pos` 指示的位置插入 `n` 个值为 `val` 的元素。
`insert(iterator pos, InputIterator first, InputIterator last)`: 在迭代器 `pos` 指示的位置插入迭代器范围 `[first, last)` 中的元素。#### 2.3 删除元素
`pop_back()`: 删除链表尾部的元素。
`pop_front()`: 删除链表头部的元素。
`erase(iterator pos)`: 删除迭代器 `pos` 指示的元素。
`erase(iterator first, iterator last)`: 删除迭代器范围 `[first, last)` 中的元素。
`clear()`: 删除链表中的所有元素。#### 2.4 访问元素
`front()`: 返回链表头部的元素的引用。
`back()`: 返回链表尾部的元素的引用。
`begin()`: 返回指向链表头部的迭代器。
`end()`: 返回指向链表尾部之后位置的迭代器。
`size()`: 返回链表中元素的数量。
`empty()`: 判断链表是否为空。#### 2.5 其他操作
`sort()`: 对链表中的元素进行排序。
`reverse()`: 反转链表中的元素顺序。
`unique()`: 删除链表中相邻的重复元素。
`merge(list& x)`: 将链表 `x` 合并到当前链表中,要求两个链表已经排序。
`splice(...)`: 将其他链表的部分或全部元素插入到当前链表中。### 3. 示例代码```c++
#include int main() {std::list
STL链表**简介**STL (Standard Template Library) 提供了多种容器,其中链表是一种常用的线性数据结构。STL 链表以双向链表的形式实现,允许在链表的任意位置高效地进行插入和删除操作。 与数组或`vector`相比,链表在插入和删除元素时无需移动其他元素,从而提高了效率,尤其是在频繁进行插入和删除操作的情况下。然而,链表的随机访问效率较低,需要遍历链表才能访问特定位置的元素。
1. STL链表的类型:`std::list`STL 提供的链表类型是 `std::list`,它定义在 `` 头文件中。 `std::list` 是一个模板类,可以存储各种数据类型的元素。
2. `std::list` 的主要成员函数以下列出一些常用的 `std::list` 成员函数:
2.1 构造函数* `list()`: 创建一个空的链表。 * `list(size_type n, const value_type& val)`: 创建一个包含 `n` 个值为 `val` 的元素的链表。 * `list(const list& x)`: 复制构造函数,创建一个与 `x` 相同的链表。 * `list(InputIterator first, InputIterator last)`: 从迭代器范围 `[first, last)` 创建一个链表。
2.2 插入元素* `push_back(const value_type& val)`: 在链表尾部插入一个元素。 * `push_front(const value_type& val)`: 在链表头部插入一个元素。 * `insert(iterator pos, const value_type& val)`: 在迭代器 `pos` 指示的位置插入一个元素。 * `insert(iterator pos, size_type n, const value_type& val)`: 在迭代器 `pos` 指示的位置插入 `n` 个值为 `val` 的元素。 * `insert(iterator pos, InputIterator first, InputIterator last)`: 在迭代器 `pos` 指示的位置插入迭代器范围 `[first, last)` 中的元素。
2.3 删除元素* `pop_back()`: 删除链表尾部的元素。 * `pop_front()`: 删除链表头部的元素。 * `erase(iterator pos)`: 删除迭代器 `pos` 指示的元素。 * `erase(iterator first, iterator last)`: 删除迭代器范围 `[first, last)` 中的元素。 * `clear()`: 删除链表中的所有元素。
2.4 访问元素* `front()`: 返回链表头部的元素的引用。 * `back()`: 返回链表尾部的元素的引用。 * `begin()`: 返回指向链表头部的迭代器。 * `end()`: 返回指向链表尾部之后位置的迭代器。 * `size()`: 返回链表中元素的数量。 * `empty()`: 判断链表是否为空。
2.5 其他操作* `sort()`: 对链表中的元素进行排序。 * `reverse()`: 反转链表中的元素顺序。 * `unique()`: 删除链表中相邻的重复元素。 * `merge(list& x)`: 将链表 `x` 合并到当前链表中,要求两个链表已经排序。 * `splice(...)`: 将其他链表的部分或全部元素插入到当前链表中。
3. 示例代码```c++
include
include int main() {std::list
4. 总结`std::list` 是一个功能强大的链表容器,适合在需要频繁插入和删除操作的场景中使用。 理解其成员函数以及使用迭代器进行操作是高效利用 `std::list` 的关键。 然而,需要注意其随机访问效率较低的缺点,在需要频繁随机访问元素的场景中,应该考虑使用其他容器,例如 `std::vector` 或 `std::deque`。