C++容器适配器

容器适配器是用基本容器实现的一些新容器,这些容器可以用于描述更高级的数据结构。容器适配器有三种:stack、queue和priority_queue。stack可以与数据结构中的栈对应,它具有先进后出的特性,而queue则可以理解为队列,它具有先进先出的特性,priority_queue则是带优先级的队列,其元素可以按照某种优先级顺序进行删除。

例1:

 #include <iostream> #include <stack> using namespace std;  int main() {     stack< int > s;     int a;     while(cin >> a)     {         s.push(a);     }     while( !s.empty() )     {         a = s.top();         s.pop();         cout<< a <<endl;     }     return 0; }

本例是一个stack的示例程序,我们在主函数中定义了一个stack容器实体s,之后我们定义了一个变量a,我们用一个while循环向容器s中添加数据。之后再利用一个while循环将元素都出栈并打印显示。对于stack,push为入栈操作即向栈中添加元素,pop为出栈操作即删除栈顶元素,top函数则为返回栈顶元素但是并不删除它,empty函数则用于判断栈是否为空,若为空则返回true,否则返回false。

默认情况下stack容器衍生自deque,当我们定义一个stack容器实例时:

 stack < int > s;

它其实等价于:

 stack < int, deque < int > > s;

如果我们想从vector衍生出stack容器则需要按照如下方式进行定义:

 stack < int, vector < int > > s;

例2:

 #include <iostream> #include <queue> using namespace std;  int main() {     queue < int > q;     int a;     while(cin >> a)     {         q.push(a);     }     while( !q.empty() )     {         a = q.front();         q.pop();         cout<< a <<endl;     }        return 0; }

本例是queue容器的一个示例程序,对于queue容器而言,它同样默认是衍生自deque容器的。与stack容器相同,queue同样有push、pop函数用于插入和删除元素,只不过不同的是stack只能操作栈顶,而queue是在队列尾部插入元素,在队列头部删除元素。stack容器用top函数访问栈顶元素,而queue没有栈顶这么一说,因而也就没有top函数了,我们想访问队列头的元素可以使用front函数,该函数只是访问并不删除元素。empty函数同样可以用于判断队列queue是否为空。

例3:

 #include <iostream> #include <queue> using namespace std;  int main() {     priority_queue < int > p;      int a;     while(cin >> a)     {         p.push(a);     }     while( !p.empty() )     {         a = p.top();         p.pop();         cout << a <<" ";     }        cout << endl;     return 0; }

本例是priority_queue容器的示例程序,使用priority_queue容器我们只需要包含头文件queue就可以了。同样priority_queue容器可以用push和pop函数来插入和删除元素,priority_queue容器提供了top函数用于访问下一个元素,访问但不删除。对于整型的优先队列而言,默认是按照数据从大到小的顺序删除元素的。程序运行情况如下:
1 89 23 43 54 32 65 0 8 18 67 +↙
89 67 65 54 43 32 23 18 8 1 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值