Stack(last in first out) and Exception

原创 2016年05月14日 21:59:30
   1、 T& top();

       const T& top() const;

数据结构讲到栈的实现函数其中public函数中有

T const& top (void)const {return data_[top_-1];}
T& top (void) {return data_[top_-1];}
同样也有T const& operator[](int h)const {return data_[h];}
T& operator[](int h) {return data_[h];}

T const&与T &的区别:

 一个加了常量限定符,一个没加,也相应的一个是常引用,不能修改其值,一个为引用,可以修改值。

如果返回值是常引用,说明不能把返回值作为左值,也就是

a.top() = 10;//如果a 为常对象,这句是非法的

如果返回值是引用,就可以作为左值:

a.top() = 10; //如果a 不是常对象,这句把a的data_[top_-1]修改为10了;

常对象就是定义类对象时加上const限定符。

const CA a;

常对象只能调用常成员函数,也就是在函数未尾加了const限定符的成员函数,而在常成员函数里不能修改类的数据成员。

2、c++ STL 栈stack介绍

C++ Stack是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。
c++ STL栈stack的头文件为:

#include<stack> 

c++ STL栈stack的成员函数介绍:

操作      比较和分配堆栈
empty() 堆栈为空则返回真
pop()   移除栈顶元素
push()  在栈顶增加元素
size()  返回栈中元素数目
top()   返回栈顶元素

栈的push(), pop()序列具体实现:

template<class T>
bool stack<T>::push(T value) 
{ 
    if((MAXSIZE-1)==head){ 
        cout<<"栈已满"<<endl; 
        return false; 
    } 
    s[++head]=value; 
    return true; 
} 
template<class T> 
bool stack<T>::pop() 
{ 
    if(-1==head){ 
        cout<<"栈已空"<<endl; 
        return false; 
    } 
    --head; 
    return true; 
} 

范例:

转载自http://www.2cto.com/kf/201303/198735.html

#include <iostream>  
using namespace std; 
const int MAXSIZE=10; 
template<class T> 
class stack 
{ 
public: 
    stack(); 
    ~stack(); 
    bool push(T value); 
    bool pop(); 
    bool empty(); 
    T top(); 
private: 
    T s[MAXSIZE];//栈对应的元素  
    int head;//指向栈顶元素  
}; 

template<class T> 
bool stack<T>::empty() 
{ 
    return head==-1?1:0; 
} 

template<class T> 
stack<T>::stack() 
{ 
    head=-1; 
} 

template<class T> 
stack<T>::~stack() 
{ 
} 

template<class T> 
bool stack<T>::push(T value) 
{ 
    if((MAXSIZE-1)==head){ 
        cout<<"栈已满"<<endl; 
        return false; 
    } 
    s[++head]=value; 
    return true; 
} 

template<class T> 
bool stack<T>::pop() 
{ 
    if(-1==head){ 
        cout<<"栈已空"<<endl; 
        return false; 
    } 
    --head; 
    return true; 
} 

template<class T> 
T stack<T>::top() 
{ 
   if(-1==head) 
       throw 1; 
   else 
       return s[head]; 
} 

bool Is_Pop(int *a,int *b,int len_a,int len_b) 
{ 
    if(len_a!=len_b) 
        return false; 
    stack<int> s; 
    int i=1,j=1; 
    while(j!=len_a){ 
        //如果输入的b数组数字有问题  
        if(b[j]<1 || b[j]>=len_a) 
            return false; 
        //如果数组a全部入栈,那么依次出栈和b[j]比较  
        if(i==len_a){ 
            while(!s.empty()){ 
                if(s.top()!=b[j++]) 
                    return false; 
                s.pop(); 
            } 
            return true; 
        } 
        if(a[i]<b[j]){ 
            s.push(a[i++]); 
        } 
        else { 
            s.push(a[i]); 
            ++i; 
            ++j; 
            s.pop(); 
        } 
    }     
    return true; 
} 

void main() 
{ 
    stack<int> s; 
    int Push[]={0,1,2,3,4,5};//从Push[1]开始  
    int Pop[]={0,4,3,5,1,2};//从Pop[1]开始  
    cout<<Is_Pop(Push,Pop,sizeof(Push)/sizeof(int),sizeof(Pop)/sizeof(int)); 
    system("pause"); 
} 
版权声明:本文为博主原创文章,未经博主允许不得转载。

jdk源码分析之LinkedList

LinkedList关键属性size表示当前链表保存了多少数据,first指针指向链表第一个数据,last指针指向链表最后一个数据 transient int size = 0; /**...
  • shihui512
  • shihui512
  • 2016年05月23日 15:06
  • 532

英文名字中的first name与last name

原链:http://hi.baidu.com/yyqqy/item/1b82da712c5fcf2bd7a89c51 在电影里他们有时候只说First name和Last name,有时三个...
  • BeTalker
  • BeTalker
  • 2013年03月11日 21:57
  • 3570

c语言实现通用数据结构(一):通用链表

忽然想起来,大概在两年之前学习C语言的时候,曾经用C语言写过一些通用的数据结构。主要也就实现了链表、队列、椎、HashSet,还有HashMap。当时只是知道标准的C语言中没有这方面的类库,后来才知道...
  • hxpjava1
  • hxpjava1
  • 2017年06月12日 11:59
  • 276

Java异常的栈轨迹(Stack Trace)

捕获到异常时,往往需要进行一些处理。比较简单直接的方式就是打印异常栈轨迹Stack Trace。说起栈轨迹,可能很多人和我一样,第一反应就是printStackTrace()方法。其实除了这个方法,还...
  • z5234032
  • z5234032
  • 2016年03月14日 17:53
  • 682

PKU C++程序设计实习 学习笔记6 标准模板库STL

标准模板库STL 8.1 STL概述 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用:1.面向对象的思想:继承和多态,标准类库  2.泛型程序设计(gene...
  • buxizhizhou530
  • buxizhizhou530
  • 2015年05月10日 12:02
  • 1223

STL源码剖析——STL算法之find查找算法

前言     由于在前文的《STL算法剖析》中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解。本文介绍的STL算法中的find、search...
  • huangyimo
  • huangyimo
  • 2017年11月21日 10:19
  • 50

浅析C++ StackTrace 堆栈轨迹

堆栈轨迹:如果你需要打印出某个时间的调用堆栈状态,你将产生一个堆栈轨迹。 stack trace 中包括三部分,分别为:.bss .text .data bss: 表示程序中未初始化的全局变量的一块内...
  • u011676589
  • u011676589
  • 2013年09月05日 18:03
  • 1600

pip3 下载超时

pip3 read time out error up vote2down votefavorite sudo ...
  • chengzheng_hit
  • chengzheng_hit
  • 2017年01月30日 23:48
  • 1155

centos7防火墙导致java程序访问mongodb3.0.1时报错的问题

环境描述: 数据库:mongodb3.0.1 数据库系统:centos7,(虚拟机,最小安装) 数据库驱动:mongo-java-driver-3.0.0.jar 问题描述:shell...
  • hkh_1012
  • hkh_1012
  • 2015年04月06日 09:05
  • 13094

DB2 Alter Table简介及使用

对于普通表的修改造作,需要考虑下面两种情况: 1.表中有数据 当表中存放着数据的时候,对列的修改仅限于将该列的数据类型修改为相应兼容的数据类型, 或者保持原来的数据类型不变,长度变小了(不能小于...
  • BOBO12082119
  • BOBO12082119
  • 2013年04月02日 07:48
  • 5052
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Stack(last in first out) and Exception
举报原因:
原因补充:

(最多只允许输入30个字)