1. 程式人生 > >C++學習筆記--模板

C++學習筆記--模板

The general form of a template function definition is shown here:

通用的模板函式定義如下所示:

template<class type> ret-type func-name(parameter list){// body of function}
#include <iostream>
#include <vector>
#include <cstdlib>
#include <string>
#include <stdexcept>
using namespace std;
template <class T>
class Stack
{
private:
    vector<T> elems;  //elements
public:
    void push(T const &); // push element
    void pop(); // pop element
    T top() const;
    bool empty() const
    {
        return elems.empty();
    }
};
template <class T>
void Stack<T>::push(T const & elem)
{
    elems.push_back(elem);
}
template <class T>
void Stack<T>::pop()
{
    if (elems.empty())
    {
        throw out_of_range("Stack<>::pop(): empty stack");
    }
    elems.pop_back();
}
template <class T>
T Stack<T>::top() const
{
    if (elems.empty())
    {
        throw out_of_range("Stack<>::top(): empty stack");
    }
    return elems.back();
}
int main(void)
{
    try
    {
        Stack<int> intStack;
        Stack<string> stringStack;
        intStack.push(7);
        cout << intStack.top() << endl;
        stringStack.push("hello");
        cout << stringStack.top() << endl;
        stringStack.pop();
        stringStack.pop();
    }
    catch (exception const & ex)
    {
        cerr << "Exception: " << ex.what() << endl;
        return -1;
    }
}

輸出:

[email protected]:~/c++$ ./a.out
7
hello
Exception: Stack<>::pop(): empty stack

相關推薦

C++學習筆記 — STL標準模板

STL簡介 STL是(tandard Template Library)中文名標準模板庫。從根本上說,STL是一些“容器”的集合,這些“容器”有list,vector,set,map等,STL也是演算法和其他一些元件的集合。這裡的“容器”和演算法的集合指的是世界

C++學習筆記模板

The general form of a template function definition is shown here: 通用的模板函式定義如下所示: template<class

C學習筆記(一)程式設計作業

C學習筆記(一)-程式設計作業 第十一週作業: [Loop]雙基迴文數 [Loop]校門外的樹 [Algorithm]約瑟夫環 [Recursion] 漢諾塔 [Algorithm]紀念郵票 [algorithm]

C++程式設計語言》學習筆記1容器

容器 容器名 資料結構 vector<T> 可變大小向量 list<T> 雙向連結串列 forward_list<T> 單向連結串列 deque<T> 雙端佇列 set<T&g

C學習筆記(二)理論

C學習筆記(二)-理論 理論選擇易錯題 本部落格用來記錄理論易錯題及一些重點概念。 如存在問題,歡迎指出。 理論選擇易錯題 What is the output of this C code? #include <stdio

Objective-C基礎學習筆記(三)面向物件的三大特性之封裝

面向物件的三大特性:封裝(成員變數)、繼承、多型; 一、 封裝 1. 封裝的理解:     在開發過程中,考慮到安全性要求,我們通常不讓外界直接修改我們類的成員變數,而讓外界使用我們提供的方法來修改,這樣類 的成員變數就           封裝起來了。 2. 封裝的目的就

算法導論學習筆記(2)歸並排序

mar 今天 iostream 介紹 font 額外 遞歸 size dsm 今天學習了算法導論上的歸並排序算法,而且完畢了在紙上寫出偽代碼,曾經就學過歸並可是理解的不夠透徹。以 前還一直困惑:為什麽明明歸並排序比快排的時間復雜度更穩定。為什麽庫函數不用歸

北京大學MOOC C++學習筆記(七)函式模板和類模板

函式模板: 交換兩個整型變數的值的Swap函式: void Swap(int & x,int & y) {     int tmp = x;     x = y;     y = tmp; } 交換兩個double型變數的值的Swap函式: void Swa

php學習筆記6 header dirname 以及大括號的作用

php學習筆記6 header dirname 以及大括號的作用 常用函式 header(); 用於傳送原生的http頭 <?php header("HTTP/1.0 404 Not Foun

C++學習筆記模板(一)

模板的概念 模板是實現程式碼複用的一種手段,是C++重要的特徵之一此前在定義函式與類時,必須明確指明其中用到的變數的資料型別。如果需要對不同型別的資料進行相同的處理,就需要重新定義函式或者類。 我們知道函式是一種程式碼複用的方式,通過定義不同的函式實現不同的操作,但是函

live555學習筆記5RTSP服務運作

五 RTSP服務運作 基礎基本搞明白了,那麼RTSP,RTP等這些協議又是如何利用這些基礎機制運作的呢? 首先來看RTSP. RTSP首先需建立TCP偵聽socket。可見於此函式: [cpp] view plaincopyprint? DynamicRTSPServ

c++學習筆記之類模板

類是物件的抽象,類模板是類的抽象。 比較兩個數(不同型別)的大小 在類模板內定義成員函式 #include<iostream> using namespace std; template<class numtype> class compare { public

AlexNet學習筆記1ImageNet Classification with Deep Convolutional Neural Networks

引言 最近受AlphaGo的刺激,開始從google新開源的Tensorflow庫學習DeepLearning。便匆匆忙忙的把環境搭建好,配合官網教程學習原始碼,但是由於之前沒在意機器學習這塊的知識,感覺拉下了不少功課,在Image Recognition章的

C++學習筆記 模板 包含編譯模式 分別編譯模式

看起來沒有什麼問題吧,但是你編譯一下,依然報錯。不是麼? error LNK2005: "void __cdecl Work(int)"([email protected]@@[email protected]) already defined in func.obj 又是重定義!!我們

C++學習筆記模板

模板就是實現程式碼重用機制的一種工具,它可以實現型別引數化,即把型別定義為引數, 從而實現了真正的程式碼可重用性。模版可以分為兩類,一個是函式模版,另外一個是類模版。 函式模板 函式模板的一般寫法: template <class T> 返回型別 函

Live555學習筆記14live555多執行緒論

十四:live555多執行緒論 江湖傳聞:live555如果不改為多執行緒,在多核心機器上效率會降低. 雖然我沒做過測試,但比較相信此傳聞的真實性 . 所以在我試論述一下live555如何對多核進行支援,其實就是改為多執行緒,嘿嘿. 先看此文:http://www.live555.com/liveMedia

live555學習筆記1引子

一直想研究live555,沒有時間,終於因為專案的原因可以深入無間地研究一下了.所以在此著文以記之. 一 如何編譯live555 利用mingw環境很容易:在live555資料夾下, genMakefiles mingw make 即可. 可以用genWi

C++學習筆記 -- 迴圈佇列的模板

#include<iostream> #include<cassert> using namespace std; template<class T,int SIZE = 50> class queue { public:queue():

ES6學習筆記構建工具指令碼

安裝依賴包:~/es6 $ npm install gulp gulp-if gulp-concat webpack webpack-stream vinyl-named gulp-livereload gulp-plumber gulp-rename gulp-ugli

經典SQL學習筆記 (十)學生資訊資料庫練習

學生資訊資料庫 1) 建立一張學生表,包含以下資訊,學號,姓名,年齡,性別,家庭住址,聯絡電話 ,其中id為主鍵,且設定自增長,姓名不能為空。 ---------------------------