实验6 模板类、文件I/O和异常处理

发布时间 2023-12-18 01:24:39作者: 陈少秋
实验任务4
 1 #pragma once
 2 #include <iostream>
 3 #include <stdexcept>
 4 
 5 template <class T>
 6 class Vector {
 7 private:
 8     T* data;
 9     size_t size;
10 
11 public:
12     Vector() : data(nullptr), size(0) {}
13 
14     Vector(size_t initialSize, const T& value = T()) : size(initialSize) {
15         data = new T[size];
16         for (size_t i = 0; i < size; i++) {
17             data[i] = value;
18         }
19     }
20 
21     Vector(const Vector& other) : size(other.size) {
22         data = new T[size];
23         for (size_t i = 0; i < size; i++) {
24             data[i] = other.data[i];
25         }
26     }
27 
28     ~Vector() {
29         delete[] data;
30     }
31 
32     size_t get_size() const {
33         return size;
34     }
35 
36     T& at(size_t index) {
37         if (index >= size) {
38             throw std::out_of_range("Index out of range");
39         }
40         return data[index];
41     }
42 
43     T& operator[](size_t index) {
44         if (index >= size) {
45             throw std::out_of_range("Index out of range");
46         }
47         return data[index];
48     }
49 
50     friend void output(const Vector& vec) {
51         for (size_t i = 0; i < vec.size; i++) {
52             std::cout << vec.data[i] << " ";
53         }
54         std::cout << std::endl;
55     }
56 };
Vector.hpp
 1 #include <iostream>
 2 #include "Vector.hpp"
 3 void test() {
 4 using namespace std;
 5 int n;
 6 cin >> n;
 7 Vector<double> x1(n);
 8 for(auto i = 0; i < n; ++i)
 9 x1.at(i) = i * 0.7;
10 output(x1);
11 Vector<int> x2(n, 42);
12 Vector<int> x3(x2);
13 output(x2);
14 output(x3);
15 x2.at(0) = 77;
16 output(x2);
17 x3[0] = 999;
18 output(x3);
19 }
20 int main() {
21 test();
22 }
task4.cpp
运行测试截图(换一组测试数据):
实验任务5
task5.cpp源码
 
运行结果截图