• 非类型模板参数


    第四章:

    一、非类型的类模板参数

    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;
        }
    }
  • 相关阅读:
    Ckeditor事件绑定
    Linux使用netstat命令查看并发连接数
    memcached 常用命令及使用说明
    Linux(Ubuntu)下面SecureCRT 完全破解
    Linux下用SCP无需输入密码传输文件
    Java的URL类(一)
    java编码与解码(一)
    IDEA破解
    linux查看日志文件命令
    springboot +mybatis 搭建完整项目
  • 原文地址:https://www.cnblogs.com/ch122633/p/12972419.html
Copyright © 2020-2023  润新知