【STL学习笔记】 stack、 queue 和 deque 的基本概念和用法

stack

基本概念

栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为

栈中进入数据称为 — 入栈 push
栈中弹出数据称为 — 出栈 pop
栈内元素先进后出
外部只能获取到栈顶元素 stack.top()

stack 常用接口

构造函数:

stack<T> stk; //stack采用模板类实现, stack对象的默认构造形式
stack(const stack &stk); //拷贝构造函数

赋值操作:

stack& operator=(const stack &stk); //重载等号操作符

数据存取:

push(elem); //向栈顶添加元素
pop(); //从栈顶移除第一个元素
top(); //返回栈顶元素

大小操作:

empty(); //判断堆栈是否为空
size(); //返回栈的大小

queue

基本概念

队列容器允许从一端新增元素,从另一端移除元素
队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为

队列中进数据称为 — 入队 push
队列中出数据称为 — 出队 pop
队列内元素先进先出

queue 常用接口

构造函数:

queue<T> que; //queue采用模板类实现,queue对象的默认构造形式
queue(const queue &que); //拷贝构造函数

赋值操作:

queue& operator=(const queue &que); //重载等号操作符

数据存取:

push(elem); //往队尾添加元素
pop(); //从队头移除第一个元素
back(); //返回最后一个元素
front(); //返回第一个元素

大小操作:

empty(); //判断堆栈是否为空
size(); //返回栈的大小

deque

基本概念

双端数组,可以对队列头端进行插入删除操作,deque容器的迭代器也是支持随机访问

deque与vector区别:

  • vector对于头部的插入删除效率低,数据量越大,效率越低
  • deque相对而言,对头部的插入删除速度回比vector快
  • vector访问元素时的速度会比deque快,这和两者内部实现有关

deque内部工作原理:

  • deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
  • 中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
    deque 的结构

常用接口

deque构造函数

deque<T> deqT;             //默认构造形式
deque(beg, end);           //构造函数将[beg, end)区间中的元素拷贝给本身。
deque(n, elem);            //构造函数将n个elem拷贝给本身。
deque(const deque &deq);   //拷贝构造函数

deque赋值

deque& operator=(const deque &deq); //重载等号操作符
assign(beg, end);                   //将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);                    //将n个elem拷贝赋值给本身。

示例:

void printDeque(const deque<int>& d)  // 使用const关键字以防止对 d 内元素做修改
{                                     // 对应的迭代器使用 const_iterator
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
		cout << *it << " ";
	}
}

deque 插入和删除

两端插入操作:

push_back(elem);   //在容器尾部添加一个数据
push_front(elem);  //在容器头部插入一个数据
pop_back();        //删除容器最后一个数据
pop_front();       //删除容器第一个数据

指定位置操作:

insert(pos, elem);     //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
insert(pos, n, elem);  //在pos位置插入n个elem数据,无返回值。
insert(pos, beg, end); //在pos位置插入[beg,end)区间的数据,无返回值。

clear();              //清空容器的所有数据
erase(beg, end);      //删除[beg,end)区间的数据,返回下一个数据的位置。
erase(pos);           //删除pos位置的数据,返回下一个数据的位置。

deque 数据存取

at(int idx); //返回索引idx所指的数据
operator[];  //返回索引idx所指的数据
front();     //返回容器中第一个数据元素                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
back();      //返回容器中最后一个数据元素

排序

使用时包含头文件 algorithm 即可

sort(iterator beg, iterator end)   //对beg和end区间内元素进行排序 

内容参考自黑马程序员C++教程从0到1入门编程课程和笔记

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值