C++:顺序容器及顺序容器适配器(stack、queue、priority_queue)
来源:互联网 发布:大数据电商平台 编辑:程序博客网 时间:2024/05/21 17:53
顺序容器:vector、list、queue、deque。
为了定义一个容器类型的对象,必须先包含相关头文件,即
#include <vector>#include <list>#include <queue>#include <deque>
容器是类模板,要定义某种特殊的容器,必须在容器名后加一对尖括号,尖括号里面提供容器中存放的元素的类型:
vector<string> svec;list<int> ilist;queue<Sales_item> items;
1. 容器元素的初始化
1.1 将一个容器初始化为另一个容器的副本
C c(c2);//创建容器c2的副本c;
将一个容器复制给另一个容器时,类型必须匹配,容器类型和元素类型都必须相同。
1.2 初始化为一段元素的副本
通过使用迭代器将一种容器内的元素复制给另一种容器。
//用svec的每个元素给slist赋值list<string> slist(svec.begin(),svec.end());//用svec的部分元素给slist赋值vector<string>::iterator mid=svec.begin()+svec.size()/2;//找到svec的中间位置deque<string> front(svec.begin(),mid);deque<string> back(mid,svec.end());
使用迭代器,不要求容器类型相同,容器内的元素类型也可以不相同。
2. 迭代器和迭代器范围
常用迭代器运算包括:
*iter: 返回iter所指向的元素的引用iter->mem: 对iter进行解引用,获取指定元素中名为mem的成员。等效于(*iter).mem++iteriter++--iteriter--iter1==iter2iter1!=iter2//比较两个迭代器是否相等,当它们指向同一个容器中的同一个元素或超出末端的下一位置时,两个迭代器相等
对vector和queue而言,还有另外的迭代器操作:
iter + niter - niter1 += iter2iter1 -=iter2iter1-iter2
2.1 迭代器范围
迭代器范围是一个左闭合区间,其标准表示方式为:
[frist,last)
它表示范围从frist开始,到last结束,但不包括last。
c.begin() :返回一个迭代器,指向容器c的第一个元素 c.end() :返回一个迭代器,指向容器c的最后一个元素的下一位置 c.rbegin():返回一个逆序迭代器,它指向c的最后一个元素 c.rend():返回一个逆序迭代器,它指向c的第一个元素的前面的位置
3. 容器适配器
STL提供了三种顺序容器适配器:queue、priority_queue和stack。使用适配器时,必须包含相关的头文件:
include <stack>include <queue>
3.1 适配器的初始化
适配器有两个构造函数:默认构造函数用于创建空对象,而带一个容器参数的构造函数将参数容器的副本作为其基础值。如:
stack<int> stk;queue<int> deq;stack<int> stk(deq);queue<int> que[10];//如果想建立元素是队列的数组,可以这样声明
默认的stack和queue都基于deque容器实现,而priority_queue则基于vector实现。
3.2 stack
stack提供的所有操作如下:
s.empty() //如果栈为空,则返回true,否则返回false。s.size() //返回栈中元素的个数s.pop() //删除栈顶元素,但不返回其值s.top() //返回栈顶元素的值,但不删除它s.push(item)//在栈顶压入新元素
3.3 queue
STL提供了两种风格的队列:FIFO队列(简称队列,queue)以及优先级队列。首先是queue,它的常用操作有:
q.empty() //如果队列为空,则返回true,否则返回false。q.size() //返回队列中元素的个数q.pop() //删除队首元素,但不返回其值q.front() //返回队首元素的值,但不删除它q.back() //返回队尾元素的值,但不删除它q.push(item)//在队尾压入新元素
3.4 priority_queue
priority_queue特别之处在于,允许用户为队列中存储的元素设置优先级。
STL默认使用<
操作符来确定对象之间的优先级关系,所以如果要使用自定义对象,需要重载 <
操作符。
注意到,priority_queue的操作接口和stack是一样的:
q.empty() //如果priority_queue为空,则返回true,否则返回false。q.size() //返回priority_queue中元素的个数q.pop() //删除priority_queue首元素,但不返回其值q.top() //返回priority_queue首元素的值,但不删除它q.push(item)//在priority_queue尾压入新元素
0 0
- C++:顺序容器及顺序容器适配器(stack、queue、priority_queue)
- stl 顺序容器适配器之stack, priority_queue, queue用法
- C++语法基础--顺序容器(五)--容器适配器-- queue,priority_queue,stack
- 容器适配器(stack,queue,priority_queue)
- 容器适配器:stack、queue、priority_queue
- stl 顺序容器vector(priority_queue),顺序容器List,顺序容器deque(queue, stack)详解
- STL之容器适配器:stack,queue , priority_queue
- Chapter 9.容器适配器stack、queue、priority_queue
- Chapter 9.容器适配器stack、queue、priority_queue
- 容器适配器(Adapter):stack,queue,priority_queue
- STL 笔记(三) 容器适配器 stack、queue、priority_queue
- STL 笔记(三) 容器适配器 stack、queue、priority_queue
- C++容器-4容器适配器stack、queue、priority_queue
- stl之适配器容器——stack, queue, priority_queue
- 八、STL中的容器适配器stack、queue、priority_queue
- 顺序容器:容器适配器
- 顺序容器及相应的容器适配器
- 顺序容器及相应的容器适配器
- Keytool工具使用方法
- 张氏读写锁,c++信号量实现
- C++ bitset的使用简介
- 104. Maximum Depth of Binary Tree(菜鸟刷题第一天)
- linux编译驱动之 make modules SUBDIRS
- C++:顺序容器及顺序容器适配器(stack、queue、priority_queue)
- Mysql备份和恢复
- Spark Shuffle内存分析
- delphi(客户端) socket 与 PHP_socket(服务器) 通信的例子
- dz论坛程序备份搬家
- 常用oracle函数备份
- 动态创建mfc控件
- java 泛型
- JS加载js文件或css文件和判断是否加载该js或css