一、list
1.1list的定义和结构
1.2list的常用函数
1.3list代码示例
二、stack
2.1stack的定义和结构
stack的常用定义
2.2常用函数
2.3stack代码示例
一、list
1.1list的定义和结构
- list的使用频率不高,在做题时极少遇到需要使用list的情景。
- ist是一种双向链表容器,它是标准模板库(STL)提供的一种序列容器。
- list容器以节点(node)的形式存储元素,并使用指针将这些节点链接在一起,形成一个链表结构。
- list容器的定义和结构如下:
template class list;
list容器模板接受两个参数:
- T:指定容器中存储的元素类。
- Allocator (可选):指定用于分配内存的分配器类型,默认为std::allocator。
list容器的特点包括:
- 双向性:每个节点都包含指向前一个节点和后一个节点的指针,因此可以在常数时间内在链表中的任意位置进行插入、删除和访问操作。
- 动态大小: 链表的大小可以根居需要动态扩展或收缩,不需要预先指定容器的大小
- 不连续存储:链表中的节点可以在内存中的任意位置分布,不要求连续存储因此插入和删除操作不会导致元素的移动。
- list与其他标准序列容器(array,vector和deque)相比,list通常可以在容器内的任何位置插入、提取和移动元素。
- list与其他标准序列容器(array,vector和deque)相比,list和forward_list(单链表实现)的主要缺点是他们不能通过位置直接访问元素;例如,要访问列表中的第五个元素,必须从已知位置(开始或结束)迭代到该位置,需要线性时间开销。
- 存储密度低,list要使用一些额外的内容空间(next,prev)来保持与每个元素相关联(前后续的线性)的链接信息,从而导致存储小元素类型(如char,short,int等)的列表的存储密度低。
list容器提供了一系列成员函数和迭代器来操作和访问链表中的元素,包括插入、删除、访问、反转等操作。可以使用迭代器来遍历链表中的元素。
以下是一个示例,展示如何使用list容器:
#include #include using namespace std; int main() { list myList; //在链表尾部插入元素 myList.push_back(1); myList.push_back(2); myList.push_back(3); //在链表头不插入元素 myList.push_front(0); //遍历链表并输出元素 for (int num : myList) { cout