首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 模板實現通用棧類:支援 int、double、char、long、bool 類型

     編輯:程式設計綜合問答

模板棧完整實現

#include 
#include 
#include 

template 
class Stack {
private:
    std::vector _data;

public:
    void push(const T& val) { _data.push_back(val); }
    void pop() {
        if (_data.empty()) throw std::underflow_error("Stack empty");
        _data.pop_back();
    }
    T& top() {
        if (_data.empty()) throw std::underflow_error("Stack empty");
        return _data.back();
    }
    const T& top() const {
        if (_data.empty()) throw std::underflow_error("Stack empty");
        return _data.back();
    }
    bool empty() const { return _data.empty(); }
    size_t size() const { return _data.size(); }
};

多類型測試主程序

int main() {
    // int
    Stack si;
    si.push(10); si.push(20);
    std::cout << "int top: " << si.top() << '\n'; // 20

    // double
    Stack sd;
    sd.push(3.14); sd.push(2.71);
    std::cout << "double top: " << sd.top() << '\n'; // 2.71

    // char
    Stack sc;
    sc.push('A'); sc.push('B');
    std::cout << "char top: " << sc.top() << '\n'; // B

    // long
    Stack sl;
    sl.push(10000000000L);
    std::cout << "long top: " << sl.top() << '\n';

    // bool
    Stack sb;
    sb.push(true); sb.push(false);
    std::cout << "bool top: " << std::boolalpha << sb.top() << '\n'; // false

    return 0;
}

關鍵點

  1. 類型安全:編譯期推導,杜絕 void* 強轉風險
  2. 異常保證:空棧操作拋出標準異常,調用者可捕獲
  3. 內存管理:委託 std::vector 自動擴容/釋放,無裸指針
  4. 可擴展:需額外功能(如遍歷、查找)只需在類中添加方法

進階:固定容量棧(嵌入式場景)

template 
class FixedStack {
    T _buf[CAP];
    size_t _top = 0;
public:
    bool push(const T& v) { if (_top == CAP) return false; _buf[_top++] = v; return true; }
    bool pop(T& out) { if (_top == 0) return false; out = _buf[--_top]; return true; }
};

無動態分配,適合無堆內存環境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved