0

我有一个这样的堆栈模板类:

#include <limits.h>  // header for max values 

template <class T> class StakMin: public My_Stack<T> {

    My_Stack <T> Min ;
    StakMin(){
    T= INT_MAX;        // <----------- I want to select it according to the T value 
    My_Stack <T>::My_Stack();
    }
    void push(T key){
        if (key < min() )
    {
        Min.push(key);
    }
    My_Stack <T>::push(key);
    }

    T get_top(){
    int value = My_Stack <T>::get_top();
       if(value == min())
          {
              Min.get_top();  
          }
       return value;
    }
    T min(){
        if( Min.Is_empty()) return INT_MAX;  // <------------ I want to select it according to the T value 
        else return Min.peek();
    }
};

一种解决方案是使用带有 Switch 的函数并静态地做出决定,但我想知道有没有办法像模板一样行事,(更灵活)让我知道在 java 或其他语言中是否有特殊的方式。

非数字类型的最大值是多少?

4

3 回答 3

2

如果T是数字类型,则需要包含<limits>并使用std::numeric_limits

T x = std::numeric_limits<T>::max();

当然,这适用于 C++。

于 2013-09-13T05:32:51.717 回答
1

改用<limits>

T max = std::numeric_limits<T>::max();

这专门用于所有数字类型。

于 2013-09-13T05:33:30.100 回答
1

使用<limits>代替<limits.h>然后使用

T maxVal = std::numeric_limits::max();

std::numeric_limits

于 2013-09-13T07:13:17.430 回答