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 };