stack是栈,其实现也是使用了双端队列(只要不用双端队列的一端,仅用单端数据进出即完成单端队列的功能),由于queue和stack的实现均是使用deque,没有自己的数据结构和算法,所以这俩也被称为容器适配器(container adapter)。

例程

#include<stdexcept>
#include<string>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<ctime>
#include<stack>
using namespace std;
long get_a_target_long()
{
long target = 0;
cout<<"target(0~"<<RAND_MAX<<"):";
cin>>target;
return target;
}
string get_a_target_string()
{
long target = 0;
char buf[10];
cout<<"target(0~"<<RAND_MAX<<"):";
cin>>target;
snprintf(buf, 10, "%ld", target);
return string(buf);
}
int compareLongs(const void* a, const void* b)
{
return (*(long*)a - *(long*)b);
} int compareStrings(const void *a, const void *b)
{
if(*(string*)a > *(string*)b)
return 1;
else if(*(string*)a < *(string*)b)
return -1;
else
return 0;
}
void test_stack(long& value)
{
cout << "\ntest_stack().......... \n"; stack<string> c;
char buf[10]; clock_t timeStart = clock();
for(long i=0; i< value; ++i)
{
try {
snprintf(buf, 10, "%d", rand());
c.push(string(buf));
}
catch(exception& p) {
cout << "i=" << i << " " << p.what() << endl;
abort();
}
}
cout << "milli-seconds : " << (clock()-timeStart) << endl;
cout << "stack.size()= " << c.size() << endl;  //栈元素个数
cout << "stack.top()= " << c.top() << endl; //获得栈顶元素
c.pop();                 //删除栈顶
cout << "stack.size()= " << c.size() << endl;
cout << "stack.top()= " << c.top() << endl;
}
int main()
{
long int value;
cout<<"how many elements: ";
cin>>value;
test_stack(value);
return 0;
}

运行结果

deque、queue、stack因为其功能的原因,所以它们在实现上没有迭代器(iterator),也没有查找方法(find),这些方法会威胁到其功能性。(例如你可以获得栈底的迭代器(指针),将其删除,那么栈类没有移动操作,则其无法维护栈的合法性)

最新文章

  1. APP开发:对于IOS APP应用的推广渠道有哪些?
  2. iOS数据缓存及YYCache的实现分析
  3. 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题
  4. 输入年月,输出月份有几天(分别用了if——else和switch)
  5. 如何制作和部署war包
  6. Spring3 MVC Login Interceptor(Spring 拦截器)
  7. hadoop 2.2.0 集群部署 坑
  8. thinkphp框架的路径问题 - 总结
  9. News feed
  10. request.getParameter()及解决数据库中文乱码问题——实习第七天
  11. JS综合练习
  12. C++ concurrency in action 读随记1
  13. [BZOJ4804]欧拉心算
  14. metasploit下Windows下多种提权方式
  15. 高性能缓存Caffeine
  16. 升级到0.9 log4jmongodb(mongo-java-driver 3.x)后,报No server chosen by WritableServerSelector from cluster description ClusterDescription
  17. 「SCOI2011」糖果
  18. POJ 3216 Repairing Company(最小路径覆盖)
  19. 【CQOI2017】小Q的棋盘
  20. 跨站点脚本编制-XSS 描述及解决方法

热门文章

  1. Centos7 升级过内核 boot分区无法挂载修
  2. CommonJS与ES6 Module的使用与区别
  3. Beyond compare 4.2.3 激活和秘钥
  4. git修改用户和邮箱
  5. Spring Boot中如何自定义starter?
  6. 在Winform中直接录入表格数据和在Vue&amp;Elment中直接录入表格数据的比较
  7. Python学习周总结(一)
  8. [cf1486F]Pairs of Paths
  9. 【k8s】在AWS EKS部署并通过ALB访问k8s Dashboard保姆级教程
  10. SpringBoot 动态代理实现三方接口调用