.编写一个程序。使用类模板对数组元素进行排序和求和。产生类型实参分别为int型和double型的两个模板类,分别对整型数组与双精度数组完成所要求的操作。
时间: 2024-02-16 14:59:52 浏览: 64
下面是一个使用类模板对数组元素进行排序和求和的程序,其中包括了产生类型实参分别为int型和double型的两个模板类,分别对整型数组与双精度数组完成所要求的操作:
```c++
#include <iostream>
#include <algorithm>
template<typename T>
class ArrayOperations {
private:
T* arr;
int size;
public:
ArrayOperations(T* arr, int size) : arr(arr), size(size) {}
void sort() {
std::sort(arr, arr + size);
}
T sum() {
T sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum;
}
};
int main() {
int intArr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
double doubleArr[] = {3.14, 2.71, 1.41, 1.62, 0.62};
int intSize = sizeof(intArr) / sizeof(int);
int doubleSize = sizeof(doubleArr) / sizeof(double);
ArrayOperations<int> intOps(intArr, intSize);
ArrayOperations<double> doubleOps(doubleArr, doubleSize);
std::cout << "Before sorting:" << std::endl;
std::cout << "intArr:";
for (int i = 0; i < intSize; i++) {
std::cout << " " << intArr[i];
}
std::cout << std::endl;
std::cout << "doubleArr:";
for (int i = 0; i < doubleSize; i++) {
std::cout << " " << doubleArr[i];
}
std::cout << std::endl;
intOps.sort();
doubleOps.sort();
std::cout << "After sorting:" << std::endl;
std::cout << "intArr:";
for (int i = 0; i < intSize; i++) {
std::cout << " " << intArr[i];
}
std::cout << std::endl;
std::cout << "doubleArr:";
for (int i = 0; i < doubleSize; i++) {
std::cout << " " << doubleArr[i];
}
std::cout << std::endl;
std::cout << "Sum of intArr: " << intOps.sum() << std::endl;
std::cout << "Sum of doubleArr: " << doubleOps.sum() << std::endl;
return 0;
}
```
这个程序中,我们首先定义了一个类模板ArrayOperations,其中包含了一个指向数组的指针和数组的大小,以及两个成员函数sort()和sum()。sort()函数用于对数组元素进行排序,sum()函数用于求出数组元素之和。在main()函数中,我们定义了两个数组intArr和doubleArr,并分别计算了它们的大小。然后,我们使用ArrayOperations模板类创建了intOps和doubleOps两个对象,并将intArr和doubleArr传递给它们。接着,我们输出了排序前的数组元素,然后调用sort()函数对数组元素进行排序,并输出排序后的数组元素。最后,我们调用sum()函数分别求出了intArr和doubleArr的元素之和,并输出到控制台上。
阅读全文