sokobo
Loading...
Searching...
No Matches
vector.cpp
1#include "include/vector.h"
2#include "string"
3
4template<typename T>
6
7template<typename T>
8Vector<T>::Vector(int size) : data(size, 0) {}
9
10template<typename T>
11Vector<T>::Vector(const std::vector<T>& vec) : data(vec) {}
12
13template<typename T>
14T& Vector<T>::operator[](int i) {
15 return data[i];
16}
17
18template<typename T>
19const T& Vector<T>::operator[](int i) const {
20 return data[i];
21}
22
23template<typename T>
24int Vector<T>::size() const {
25 return data.size();
26}
27
28// Arithmetic
29template<typename T>
30Vector<T> Vector<T>::operator+(const Vector<T>& other) const {
31 if (size() != other.size())
32 throw std::runtime_error("Size mismatch");
33
34 Vector<T> result(size());
35 for (int i = 0; i < size(); ++i)
36 result[i] = data[i] + other[i];
37
38 return result;
39}
40
41template<typename T>
42Vector<T> Vector<T>::operator-(const Vector<T>& other) const {
43 if (size() != other.size())
44 throw std::runtime_error("Size mismatch");
45
46 Vector<T> result(size());
47 for (int i = 0; i < size(); ++i)
48 result[i] = data[i] - other[i];
49
50 return result;
51}
52
53template<typename T>
54Vector<T> Vector<T>::operator*(T scalar) const {
55 Vector<T> result(size());
56 for (int i = 0; i < size(); ++i)
57 result[i] = data[i] * scalar;
58
59 return result;
60}
61
62template<typename T>
63Vector<T> Vector<T>::operator/(T scalar) const {
64 if (scalar == 0)
65 throw std::runtime_error("Division by zero");
66
67 Vector<T> result(size());
68 for (int i = 0; i < size(); ++i)
69 result[i] = data[i] / scalar;
70
71 return result;
72}
73
74// Dot product
75template<typename T>
76T Vector<T>::dot(const Vector<T>& other) const {
77 if (size() != other.size())
78 throw std::runtime_error("Size mismatch");
79
80 T sum = 0;
81 for (int i = 0; i < size(); ++i)
82 sum += data[i] * other[i];
83
84 return sum;
85}
86
87// Norm
88template<typename T>
89double Vector<T>::norm() const {
90 return std::sqrt((double)dot(*this));
91}
92
93// Normalize
94template<typename T>
96 double n = norm();
97 if (n == 0) return;
98
99 for (auto& x : data)
100 x /= n;
101}
102
103// Utility
104template<typename T>
105std::string Vector<T>::toString() const {
106 std::stringstream ss;
107 ss << "[ ";
108 for (const auto& x : data)
109 ss << x << " ";
110 ss << "]";
111 return ss.str();
112}
113
114// Static
115template<typename T>
116Vector<T> Vector<T>::zeros(int size) {
117 return Vector<T>(size);
118}
119
120template<typename T>
121Vector<T> Vector<T>::ones(int size) {
122 Vector<T> v(size);
123 for (int i = 0; i < size; ++i)
124 v[i] = 1;
125 return v;
126}
Definition: vector.h:10