Skip to main content
 首页 » 编程设计

c++之获取模板中数组最小值的函数

2025年12月25日40bluestorm

我在主程序中有这段代码:

Array<int> array1 = Array<int>(5); 
array1.coutArray(); 
cout << "Minimal value: " << min(array1, 5); 

我需要函数来获取数组的最小值。我试过这个功能:

template<class Array> 
Array min(const Array* data, int size) { 
    T result = data[0]; 
    for (int i = 1; i < size; i++) 
        if (result > data[i]) 
            result = data[i]; 
    return result; 
} 

但是对于来自互联网的每一个变体,我都有一个关于第一个参数类型的错误。如何正确编写此函数或调用它? 数组类:

template <class T> 
class Array { 
protected: 
    int size; 
    T* DynamicArray; 
public: 
    Array() {}; 
    Array(size_t s) : size(s) { 
        DynamicArray = new T[size]; 
        for (int i = 0; i < size; i++) { 
            cout << "Element " << i+1 << ": "; 
            cin >> DynamicArray[i]; 
 
        } 
    } 
 
    void coutArray() { 
        for (int i = 0; i < size; i++) { 
            cout << DynamicArray[i] << " "; 
        } 
    } 
 
    ~Array() { 
        delete[]DynamicArray; 
    } 
}; 
 
template<class Array> 
Array getMin(Array* arr, int size) 
{ 
    for (int i = 0; i < size; i++) { 
        cout << arr[i]; 
    } 
} 

请您参考如下方法:

如果你的数组模板需要这个,最好为它提供开始和结束:

template <class T> 
class Array { 
protected: 
    int size; 
    T* DynamicArray; 
public: 
    .... 
 
    using value_type = T; 
 
    const T* begin() const { 
        return DynamicArray; 
    } 
 
    const T* end() const { 
        return DynamicArray + size; 
    } 
 
    T* begin() { 
        return DynamicArray; 
    } 
 
    T* end() { 
        return DynamicArray + size; 
    } 
}; 

那么你应该能够使用STL算法。

template<typename T> 
T minimum(const T &tab) 
{ 
 
    return *std::minimum_element(std::begin(tab), std::end(tab)); 
} 

请注意,您的数组是 std::vector 的不良版本。