热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++withSTL(五)queuestacklist

queue(先进先出)queue有入队push(插入)、出队pop(删除)、读取队首元素fron

queue(先进先出)

queue有入队push(插入)、出队pop(删除)、读取队首元素front、读取队尾元素back、empty,size这几种方法

#include
#include
using namespace std;
int main(void)
{queue<int> q;
//****************queue入队********************// //push函数q.push(1);q.push(2);q.push(3);q.push(4);
//****************queue队首元素********************// cout<<"队首元素"<<endl;cout<<"queue.front "<<q.front()<<endl; cout<<endl<<endl;
//****************queue队尾元素********************// cout<<"队尾元素"<<endl;cout<<"queue.back "<<q.back()<<endl;
//****************queue遍历元素********************// //queue没有支持的遍历元素的方法&#xff0c;没有迭代器//如果要便利只能pop()和push()结合使用cout<<"遍历"<<endl; int sz&#61;q.size();for(int i&#61;0;i<sz;i&#43;&#43;){int temp&#61;q.front();q.pop();q.push(temp);cout<<temp<<endl; }
//****************queue出队********************// cout<<"当前队首出队"<<endl;q.pop();sz&#61;q.size();for(int i&#61;0;i<sz;i&#43;&#43;){int temp&#61;q.front();q.pop();q.push(temp);cout<<temp<<endl; } cout<<endl<<endl;
//****************queue查询********************// //queue没有find函数,也不支持数组查询操作 cout<<"查询元素3"<<endl;sz&#61;q.size(); int flag&#61;1;for(int i&#61;0;i<sz;i&#43;&#43;){int temp&#61;q.front();q.pop();q.push(temp);if(temp&#61;&#61;3&&flag){flag&#61;0;} } if(!flag){cout<<"find it"<<endl;}else{cout<<"no"<<endl;}cout<<endl<<endl;
//****************queue判空********************////empty和size函数判空if(q.size()&#61;&#61;0){cout<<"way:queue.size() "<<"empty"<<endl;}else{cout<<"way:queue.size() "<<"nonempty"<<endl;}if(q.empty()){cout<<"way:queue.empty() "<<"empty"<<endl;}else{cout<<"way:queue.empty() "<<"nonempty"<<endl;}cout<<endl<<endl; return 0;
}

在这里插入图片描述

stack&#xff08;后进先出&#xff09;

Stack(栈)是一种后进先出的数据结构&#xff0c;也就是LIFO(last in first out) &#xff0c;
最后加入栈的元素将最先被取出来&#xff0c;在栈的同一端进行数据的插入与取出&#xff0c;这一段叫做“栈顶”。使用STL的stack需要include一个头文件

#include
#include
using namespace std;int main()
{stack<int> s;s.push(1); s.push(2);s.push(4);s.push(5);cout << s.size() << endl;while(s.empty() !&#61; true){cout << s.top() << endl;//返回栈顶元素 s.pop();}return 0;}

在这里插入图片描述

list

ist是双向循环链表&#xff0c;&#xff0c;每一个元素都知道前面一个元素和后面一个元素。
在STL中&#xff0c;list和vector一样&#xff0c;是两个常被使用的容器。
和vector不一样的是&#xff0c;list不支持对元素的任意存取 。
list中提供的成员函数与vector类似&#xff0c;不过list提供对表首元素的操作push_front、pop_front&#xff0c;这是vector不具备的。

声明&#xff1a; list l

插入&#xff1a;push_back尾部&#xff0c;push_front头部&#xff0c;insert方法前往迭代器位置处插入元素&#xff0c;链表自动扩张&#xff0c;迭代器只能使用&#43;±-操作&#xff0c;不能用&#43;n -n&#xff0c;因为元素不是物理相连的。

遍历&#xff1a;iterator和reverse_iterator正反遍历

删除&#xff1a;pop_front删除链表首元素&#xff1b;pop_back()删除链表尾部元素&#xff1b;erase&#xff08;迭代器&#xff09;删除迭代器位置的元素&#xff0c;注意只能使用&#43;±-到达想删除的位置&#xff1b;remove&#xff08;key&#xff09; 删除链表中所有key的元素&#xff0c;clear&#xff08;&#xff09;清空链表。

查找&#xff1a;it &#61; find(l.begin(),l.end(),key)

排序&#xff1a;l.sort()

删除连续重复元素:l.unique() 【2 8 1 1 1 5 1】 --> 【 2 8 1 5 1】


推荐阅读
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了一个程序,可以输出1000内能被3整除且个位数为6的所有整数。程序使用了循环和条件判断语句来筛选符合条件的整数,并将其输出。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
author-avatar
蛮小蛮将军_415
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有