设计一个数组类模板,该模板至少包含对数组元素的初始化、输出所有数组元素、输入所有数组元素、求某一个数组元素、修改某一个数组元素、求数组元素个数,对数组元素进行排序。设计一个自定义类并重载必要的输入输出运算符函数以实例化该模板测试其相关功能
时间: 2024-01-13 12:05:48 浏览: 55
一维数组类模板的设计与实现
5星 · 资源好评率100%
好的,我来设计一个数组类模板,并提供一个自定义类进行测试。
```c++
#include <iostream>
#include <algorithm>
template <typename T, int N>
class Array {
private:
T data[N];
public:
Array() { // 初始化数组元素,使用默认构造函数
for (int i = 0; i < N; ++i) {
data[i] = T();
}
}
void output() const { // 输出所有数组元素
for (int i = 0; i < N; ++i) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
}
void input() { // 输入所有数组元素
for (int i = 0; i < N; ++i) {
std::cin >> data[i];
}
}
T& operator[](int index) { // 求某一个数组元素,并支持修改
return data[index];
}
const T& operator[](int index) const { // 求某一个数组元素
return data[index];
}
int size() const { // 求数组元素个数
return N;
}
void sort() { // 对数组元素进行排序
std::sort(data, data + N);
}
};
class MyClass {
public:
MyClass() : x(0), y(0) {}
MyClass(int x_, int y_) : x(x_), y(y_) {}
friend std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
os << "(" << obj.x << ", " << obj.y << ")";
return os;
}
friend std::istream& operator>>(std::istream& is, MyClass& obj) {
is >> obj.x >> obj.y;
return is;
}
bool operator<(const MyClass& rhs) const {
return x < rhs.x || (x == rhs.x && y < rhs.y);
}
private:
int x;
int y;
};
int main() {
Array<int, 5> arr_int;
std::cout << "Input 5 integers: ";
arr_int.input();
std::cout << "The array is: ";
arr_int.output();
std::cout << "The 3rd element is: " << arr_int[2] << std::endl;
arr_int[2] = 100;
std::cout << "After modifying the 3rd element to 100, the array is: ";
arr_int.output();
std::cout << "The size of the array is: " << arr_int.size() << std::endl;
std::cout << "After sorting the array, the array is: ";
arr_int.sort();
arr_int.output();
Array<MyClass, 3> arr_obj;
std::cout << "Input 3 pairs of integers: ";
arr_obj.input();
std::cout << "The array is: ";
arr_obj.output();
std::cout << "The 2nd element is: " << arr_obj[1] << std::endl;
arr_obj[1] = MyClass(10, 20);
std::cout << "After modifying the 2nd element to (10, 20), the array is: ";
arr_obj.output();
std::cout << "The size of the array is: " << arr_obj.size() << std::endl;
std::cout << "After sorting the array, the array is: ";
arr_obj.sort();
arr_obj.output();
return 0;
}
```
这里我们设计了一个 `Array` 类模板,支持对数组元素的初始化、输出、输入、求某个元素、修改某个元素、求元素个数和排序。同时,我们提供了一个自定义类 `MyClass` 进行测试,该类重载了输入输出运算符和小于运算符。
在 `main` 函数中,我们首先通过 `Array<int, 5>` 实例化了一个 `Array` 对象 `arr_int`,然后分别进行输入、输出、访问和修改操作,并测试了元素个数和排序功能。接着,我们通过 `Array<MyClass, 3>` 实例化了另一个 `Array` 对象 `arr_obj`,进行了类似的测试。
阅读全文