zoukankan      html  css  js  c++  java
  • 非类型模板参数

    第四章:

    一、非类型的类模板参数

    template不仅可以使用参数typename,一般的参数也是可以用的。这里定义了最大数组。

    #pragma once
    #include <stdexcept>
    
    
    template<typename T, int MAXSIZE>
    class Stack
    {
    private:
        T elems[MAXSIZE];
        int numElems;
    public:
        Stack();
        void push(T const &elem);
        void pop();
        T top() const;
        bool empty() const {
            return numElems == 0;
        }
        bool full() const {
            return numElems == MAXSIZE;
        }
    };
    
    template<typename T, int MAXSIZE>
    inline Stack<T, MAXSIZE>::Stack()
        : numElems(0)
    {
    }
    
    template<typename T, int MAXSIZE>
    inline void Stack<T, MAXSIZE>::push(T const & elem)
    {
        if (numElems == MAXSIZE) {
            throw std::out_of_range("Stack<>::push(): stack is full");
        }
        elems[numElems] = elem;
        ++numElems;
    }
    
    template<typename T, int MAXSIZE>
    inline void Stack<T, MAXSIZE>::pop()
    {
        if (numElems <= 0) {
            throw std::out_of_range("Stack<>::pop() empty stack");
        }
        --numElems;
    }
    
    template<typename T, int MAXSIZE>
    inline T Stack<T, MAXSIZE>::top() const
    {
        if (numElems < 0) {
            throw std::out_of_range("Stack<>::top() stack is empty");
        }
        return elems[numElems - 1];
    }

    测试函数:

    #include <iostream>
    #include <string>
    #include <cstdlib>
    #include "stack4.hpp"
    
    int main()
    {
        std::cout << "Hello World!
    ";
        try {
            Stack<int, 20> int20Stack;
            Stack<int, 40> int40Stack;
            Stack<std::string, 40> stringStack;
    
            int20Stack.push(7);
            std::cout << int20Stack.top() << std::endl;
            int20Stack.pop();
    
            stringStack.push("hello");
            std::cout << stringStack.top() << std::endl;
            stringStack.pop();
            stringStack.pop();
        }
        catch (std::exception const& ex) {
            std::cerr << "Exception: " << ex.what() << std::endl;
            return EXIT_FAILURE;
        }
    }
  • 相关阅读:
    洛谷 U141580 简化罗波切问题
    洛谷 U141578 维修电路
    洛谷 U140760 狭义公因子
    CF75C Modified GCD
    算法题-求解斐波那切数列的第N个数是几?
    算法题-求N的阶乘
    JAVA8新特性
    nginx启动脚本,手动编辑
    javah生成带有包名的头文件
    Matlab图像处理(03)-基本概念
  • 原文地址:https://www.cnblogs.com/ch122633/p/12972419.html
Copyright © 2011-2022 走看看