C++Templates中的例子: 用vector實現一個棧Stack類模板

來源:互聯網
上載者:User

++++++++++++++++++++++++Stack1.h

 

#include <vector>  //standard vector class template: vector<>
#include <stdexcept>  //stadard exception class

//Declaration of Class Template
template<typename T>
class Stack
{
private:
 std::vector<T> elems; //elements
public:
 void push(T const&); //push element
 void pop();    //pop element
 T top() const;   //return top element
 bool empty() const
 {
  return elems.empty();
 }
};

//Implementation of Member Functions
template <typename T>
void Stack<T>::push(T const &elem)
{
 elems.push_back(elem); //append copy of passed elem
}

template <typename T>
void Stack<T>::pop()
{
 if(elems.empty()){
  throw std::out_of_range("Stack<>::pop():empty stack");
 }
 elems.pop_back();  //remove last element
}

template <typename T>
T Stack<T>::top() const
{
 if (elems.empty())
 {
  throw std::out_of_range("Stack<>::top() : empty stack");
 }
 return elems.back(); //return copy of last element
}

//SUMMARY
/*1. Vector<>對象常用的幾種操作  //參見《STL Tutorial and Reference Guide》原書pp.131 Ch6.1

1.    v.push_back(x)             在數組的最後添加一個值為t的資料  (pp.135)
2.    v.pop_back()    刪除最後一個元素 /!但當empty時unpredictable  (pp.141)
3.    v.back()     返回最後一個元素 /!但當empty時unpredictable  (pp.141)
3.    v.size()                         當前使用資料的大小
4.    v.empty()                      判斷vector是否為空白
5.    v[n]                               返回v中位置為n的元素
6.    v1=v2                           把v1的元素替換為v2元素的副本
7.    v1==v2                         判斷v1與v2是否相等
8.    !=、<、<=、>、>=      保持這些操作符慣有含義
*/

 

++++++++++++++++++++++++Stack1.cpp

 

 

// stack.cpp : 定義控制台應用程式的進入點。
//Use of Class Template Stack<>

#include <time.h>
#include "stdafx.h"
#include <string>
#include <iostream>
#include <cstdlib>
#include "stack1.h"

int _tmain(int argc, _TCHAR* argv[])
{
 try{
  Stack<int> intStack; //stack of ints;  also can  do this:"typedef Stack<int> IntStack;"
  Stack<std::string> stringStack; //stack of strings
  
  //manipulate int stack
  intStack.push(7);
  std::cout<<"intStack.top() = "<<intStack.top()<<std::endl;

  //manipulate string stack
  stringStack.push("hello");
  std::cout<<"stringStack.top() = "<<stringStack.top()<<std::endl;
  stringStack.pop();
  stringStack.pop();
 }
 catch (std::exception const& ex){
  std::cout<<"Exception ex catched: ex.what()= "<<ex.what()<<std::endl;
 }
 ::system("pause");
 return EXIT_FAILURE;  //exit program with ERROR status(stdlib.h中定義了宏EXIT_FAILURE=1,EXIT_SUCCESS=0)
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.