我在主程序中有这段代码:
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 的不良版本。


