问题 F: 类模板之高级数组 [命题人 : admin] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 实现Array类模板,至少支持构造、析构、下标访问、赋值、拷贝构造、升序排序、>>、<<等运算。 #include <iostream> #include <iomanip> using namespace std; // 在这里补充你的代码 int main() { { Array<int> a1(5); cin >> a1; cout << a1; a1.Sort(); cout << a1; } cout << "-" << endl; { Array<double> a1(5); cin >> a1; cout << a1; a1.Sort(); cout << a1; } return 0; }
时间: 2024-02-22 12:56:44 浏览: 114
以下是实现Array类模板的代码:
```c++
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
template <typename T>
class Array {
private:
T* arr;
int size;
public:
Array(int s = 0) : size(s) {
arr = new T[size];
}
Array(const Array& other) : size(other.size) {
arr = new T[size];
for (int i = 0; i < size; i++) {
arr[i] = other.arr[i];
}
}
~Array() {
delete[] arr;
}
T& operator[](int index) {
return arr[index];
}
const T& operator[](int index) const {
return arr[index];
}
Array& operator=(const Array& other) {
if (this == &other) {
return *this;
}
delete[] arr;
size = other.size;
arr = new T[size];
for (int i = 0; i < size; i++) {
arr[i] = other.arr[i];
}
return *this;
}
void Sort() {
sort(arr, arr + size);
}
friend istream& operator>>(istream& in, Array& a) {
for (int i = 0; i < a.size; i++) {
in >> a.arr[i];
}
return in;
}
friend ostream& operator<<(ostream& out, const Array& a) {
for (int i = 0; i < a.size; i++) {
out << a.arr[i] << " ";
}
out << endl;
return out;
}
};
```
具体实现说明:
1. 类模板Array中,私有成员包括一个指向T类型的指针arr和一个整数size表示数组大小。
2. 构造函数用于动态分配内存并初始化指针arr。
3. 拷贝构造函数用于拷贝另一个Array对象的数据到本对象中。
4. 析构函数用于释放动态分配的内存。
5. 重载下标运算符[],用于数组元素的访问和修改。
6. 重载赋值运算符=,用于将另一个Array对象的数据赋值给本对象。
7. Sort函数用于升序排序数组元素。
8. 重载输入运算符>>,用于从输入流中读取数组元素。
9. 重载输出运算符<<,用于将数组元素输出到输出流中。
在main函数中,先创建两个Array对象,分别为a1和a2。然后使用输入运算符>>从标准输入中读取数据到a1和a2中,再使用输出运算符<<将a1和a2的数据输出到标准输出中。接着,调用Sort函数对a1和a2进行升序排序,并再次使用输出运算符<<将排序后的a1和a2输出到标准输出中。最后,程序结束。
阅读全文