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 #include int main() {std::list myList;myList.push_back(10);myList.push_front(5);myList.insert(myList.begin(), 2); //在开头插入2for (int x : myList) {std::cout << x << " ";}std::cout << std::endl; // 输出: 2 5 10myList.pop_front();myList.erase(std::next(myList.begin())); //删除第二个元素for (int x : myList) {std::cout << x << " ";}std::cout << std::endl; // 输出: 5return 0; } ```### 4. 总结`std::list` 是一个功能强大的链表容器,适合在需要频繁插入和删除操作的场景中使用。 理解其成员函数以及使用迭代器进行操作是高效利用 `std::list` 的关键。 然而,需要注意其随机访问效率较低的缺点,在需要频繁随机访问元素的场景中,应该考虑使用其他容器,例如 `std::vector` 或 `std::deque`。

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 myList;myList.push_back(10);myList.push_front(5);myList.insert(myList.begin(), 2); //在开头插入2for (int x : myList) {std::cout << x << " ";}std::cout << std::endl; // 输出: 2 5 10myList.pop_front();myList.erase(std::next(myList.begin())); //删除第二个元素for (int x : myList) {std::cout << x << " ";}std::cout << std::endl; // 输出: 5return 0; } ```

4. 总结`std::list` 是一个功能强大的链表容器,适合在需要频繁插入和删除操作的场景中使用。 理解其成员函数以及使用迭代器进行操作是高效利用 `std::list` 的关键。 然而,需要注意其随机访问效率较低的缺点,在需要频繁随机访问元素的场景中,应该考虑使用其他容器,例如 `std::vector` 或 `std::deque`。

标签列表