C++:清空stl的stack容器

C++实现线性表 - 04 栈 数据结构与算法C++代码实现之线性表栈部分 阅读详情
AI摘要

本文探讨了两种清空C++栈的有效方法:使用while循环逐个弹出元素及利用swap方法快速清空栈。通过对比这两种方法的时间消耗,得出swap方法效率更高的结论。

很遗憾,没有现成函数,可以采用

stack<int> s;
while(!s.empty()) s.pop();
// stack操作的是堆内存,所以要一个一个弹出。
//
stack<int> s;
stack<int>().swap(s);
// swap相当于交换了s和一个空临时stack的内容,然后临时stack再结束生命周期,但由于操作的是堆空间,其实还是一个一个释放空间。

但是swap比pop要快,耗时差不多是1/3

测试代码:

int N = 10000000;

stack<int> s2;
for(int i=0;i<N;i++) s2.push(i);

double s2a = (double)clock();
stack<int>().swap(s2);
double s2b = (double)clock();
printf("\e[01;34m Program use Time: \e[01;31m%.4f ms\e[0m\n",s2b - s2a);

stack<int> s1;
for(int i=0;i<N;i++) s1.push(i);

double s1a = (double)clock();
while(!s1.empty()) s1.pop();
double s1b = (double)clock();
printf("\e[01;34m Program use Time: \e[01;31m%.4f ms\e[0m\n",s1b - s1a);

输出:

Program use Time: 168283.0000 ms
Program use Time: 510330.0000 ms
C++,STL容器适配器,stack:栈深入解析 std::stack是C++标准模板库(STL)提供的容器适配器,遵循后进先出(LIFO)原则。它基于底层容器(默认std::deque)封装实现,为栈操作提供统一接口。 阅读详情

相关推荐

C++ STL容器与常用库函数

C++ STL(STL是提高C++编写效率的一个利器)

嵌入式技术开发 7393

C++实现栈的初始化、进栈、出栈、清空、销毁、进制转换等操作

C++实现栈的初始化、进栈、出栈、清空、销毁、进制转换等操作

yy_1121的博客 1万+

栈的初始化、进栈出栈、清空栈、销毁栈

栈的初始化、进栈出栈、清空栈、销毁栈,dos输入输出

【C++】清空一个C++栈的快速方法

来源:https://stackoverflow.com/questions/40201711/how-can-i-clear-a-stack-in-c-efficiently/40201744 传统方法,使用循环: #define elemType int void clearStack(stack<elemType> &s){ while (!s.em...

weixin_30344131的博客 1万+

SQLite → PostgreSQL 迁移脚本与踩坑清单

本文提供了SQLite迁移到PostgreSQL的两种可靠路径:首选使用pgloader工具自动转换schema和数据,支持类型映射和并行复制;备选方案通过sqlite3导出CSV再用PostgreSQL的COPY命令导入,适合需要自定义清洗的场景。重点介绍了数据类型映射规则、迁移步骤、校验方法和常见问题,包括自增主键、布尔值、时间类型等关键差异处理。迁移后需进行行数核对、哈希抽样等校验,并给出了性能优化建议。最后强调迁移不仅是数据转移,更需要同步升级数据模型和索引策略,根据业务场景选择合适的数据库方案。

aifs2025的博客 1884

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛。 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口,然后还需要3个IO片选数码管接口,这样大大占用了IO口,导致连接的外设变少。因此我们引入74LS595芯片。电路设计如下: 只需要三个共阴极数码管与三个595芯片级联即可完成,通过RCLK,SCK,SER三个IO即可完成对数码管的动态控制并显示。电路焊接的实物图如下: 要求完成功能:实现数.

XiaoCaiDaYong的博客 8262

【C++】 STL之stack容器

1、基本概念 stack是一个堆栈容器,提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构 初始化:stack s; 拷贝:stack s1(s); 2、入栈 // void push(const value_type& x) s.push(elem); //向栈首部压入一个元素 3、出栈 //void pop() s.pop(); //弹出栈的首部元素 //需要注意的是弹出操作并不返回元素值 4、判空 //value_type& top() s.empt

qq_45972928的博客 1767

遥感影像分割实战:LoveDA数据集从下载到训练全流程指南(附避坑技巧)

本文以LoveDA数据集为例,提供了一份详尽的遥感影像语义分割实战指南。内容涵盖从数据下载、理解与预处理,到环境配置、模型选择与训练,再到性能调优与部署的全流程,并重点分享了多个关键环节的避坑技巧,旨在帮助开发者和研究者高效上手并解决实际问题。

cherry的博客 929

C++ 栈

【代码】C++ 栈。

m0_62805850的博客 862

SIMPLIS仿真软件2.2-SIMPLIS快速入门2

SIMPLIS仿真软件2.2-SIMPLIS快速入门2导读 导读 本文承接上一篇文章。开始介绍SIMPLIS仿真部分。正如上一篇所讲的快速入门的定位,该文对SIMPLIS的三种分析模式不会很深入的讲解,只会记录下一些重要的设置和操作。对于SIMPLIS的三种分析模式的详细讲解,后面会专门撰写。如果读者还没有搭建上一篇文章中讲述的电路,那你可以点击这个链接免费下载所需的电路SIMPLIS_tutorial_buck_converter ,然后在这个电路的基础上继续进行以下操作。 ...

qq_44677482的博客 2万+

YOLO26涨点改进 | 检测头改进篇 | 利用ASFF改进YOLO26检测头,自适应空间特征融合模块,在所有的目标检测上均有大幅度的涨点效果

本文提出了一种自适应空间特征融合(ASFF)检测头YOLO26,用于解决目标检测中特征金字塔跨尺度特征不一致的问题。ASFF通过学习空间权重图,自适应地融合不同尺度的特征,抑制特征层间的冲突信息。实验表明,该方法在MSCOCO数据集上显著提升了检测精度(45FPS下AP达42.4%),且仅引入极小推理开销。ASFF模块具有可微分性、模型无关性和计算成本低等优势,能够有效改善特征尺度不变性,实现速度与精度的良好平衡。文章详细介绍了ASFF的原理、实现代码及其在YOLO模型中的集成方法。

Ai缝合怪、助力小伙伴高效发论文 547

【C++ STL】stack栈容器的基本使用

stack 是 C++ STL 中实现栈数据结构的容器适配器,遵循「原则,只能从栈顶插入 / 删除 / 访问元素,无法操作栈底或中间元素,也无法遍历。

cool_wait学习专栏 388

YOLOv11改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 4972

高效清空C++队列(queue)的两种实用技巧

本文针对C++ STL中queue没有clear()方法的问题,深入探讨了两种高效清空队列的实用技巧:循环pop()与swap交换法。详细分析了两种方法的原理、时间复杂度、性能差异及适用场景,并提供了现代C++的最佳实践,帮助开发者根据具体需求选择最优方案,提升代码效率与可维护性。

v5w6x的博客 299

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1153

ATECC508A芯片开发笔记(三):获取508A串号、随机数源码及I2C抓包分析

ATECC508A芯片开发笔记(三):读取508A串号、获取随机数源码及I2C抓包分析 APP层函数编写及源码分析 At508_GetSernum() GetSernum抓包记录 At508_GetRandom( ) GetRandom抓包记录 经过前两章节,CryptoAuthlib库已经成功适配在代码中了,下面简单测试一下API函数,并分析下I2C通讯流程: APP层函数编写及源码分析利用li

HowieXue 薛永浩的博客 2万+

C++ STL stack和queue深度解析:从容器适配器到底层deque原理

在C++ STL中,栈(stack)和队列(queue)是两种基础且高频使用的数据结构,分别遵循后进先出(LIFO)与先进先出(FIFO)的访问模型。它们本质上是容器适配器,并不直接管理内存,而是基于底层容器(默认是deque)之上封装出受限的接口。理解容器适配器的设计思想,是深入掌握STL的关键一步。deque作为默认底层容器,采用分段连续存储结构,完美平衡了头部尾部插入删除、随机访问与内存开销等维度的需求,这也解释了为何vector或list难以胜任。实际工程中,stack和queue广泛用于表达式求值

weixin_34094282的博客 259

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++容器深度解析:stack、queue与deque的底层原理与工程实践

C++ STL容器是日常开发中高频使用的工具,而stack、queue、deque这三者常被初学者混淆。理解它们的身世与底层机制,是写出高效代码的关键。stack和queue本质是容器适配器,基于deque、vector或list二次封装,只暴露特定的访问规则;deque则是一种分段连续的双端队列,能在两端高效增删并支持随机访问。从底层原理出发,我们可以看清不同容器在内存分布、缓存命中、迭代器失效等方面的差异,进而理解为什么默认底层选deque、何时替换为vector或list能带来性能提升。在实际工程中,

weixin_34072296的博客 306

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

stack操作 and deque操作

stcak<int>mystack; mystack.push(i);' mystack.pop(); mystack.top();//栈顶元素; mystack.size(); mystack.empty(); deque: deque<int>d; d.begin(); d.end(); d.size(); d.empty(); ...

aec1234的博客 158

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据结构总结分享01——栈的实现

数据结构知识分享之栈

2502_93095505的博客 169

C++之STL容器详解(包含十种常用容器)

C++的stl是提高编写效率的一个利器,是算法类竞赛必不可少的工具,本篇博客将详细总结C++STL的各种容器及其常用方法

2203_75327677的博客 4万+

C++中STL容器总结

STL容器1、容器分类 1、容器分类 STL中通常将容器分为三类:顺序容器、关联容器和容器适配器。 1、顺序容器 是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。 顺序容器包括: vector(向量)、list(列表)、deque(队列)...

EricLee23 2362

C++ STL常用容器

C++的STL中,有哪几种容器? 容器 在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。 序列容器(7个) vector vector是一段连续的内存地址,基于数组实现,其提供了自动内存管理功能(采用了STL普遍的内存管理器allocator),可以动态改变对象长度,提供随机访问。在尾部添加和删除元素的时间是常数的,但在头部或中间就是线性时间。 在ve...

a834595603的博客 8734

C++:STL—容器

STL(标准模板库)容器是 C++ 标准库的核心组件,用于高效存储和操作数据。序列容器:vector、list、deque、array、forward_list,适合线性数据存储。关联容器:map、set、multimap、multiset,基于红黑树,适合有序键值或集合操作。无序关联容器:unordered_map、unordered_set、unordered_multimap、unordered_multiset,基于哈希表,适合高效查找。容器适配器。

hu_yuchen的博客 2967

C++STL标准库中的常用容器总结

C++ STL(标准模板库)提供了多种容器类型及其对应的迭代器,用于实现高效的数据操作。迭代器分为五种类型(随机访问、双向、前向、输出和输入迭代器),不同容器支持不同类型的迭代器。容器主要包括四大类:序列容器(array、vector、deque)、链表容器(forward_list、list)、容器适配器(stack、queue、priority_queue)和关联容器(有序/无序的set/map系列)。

SeeDoubleU的专栏 5376
上一篇: Win:批处理字符串截取
下一篇: Spark:python版本 error executor
ShellDawn
博客等级 码龄10年 75粉丝 756原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值