-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVector.h
More file actions
157 lines (125 loc) · 3.4 KB
/
Vector.h
File metadata and controls
157 lines (125 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#pragma once
#include <iostream>
template<typename XYVector>
class XYVectorIterator{
public:
using ValueType = typename XYVector :: ValueType;
using PointerType = ValueType*;
using RefrenceType = ValueType&;
private:
PointerType ptr;
public :
XYVectorIterator(PointerType ptr){
this->ptr = ptr;
}
XYVectorIterator& operator++(){
ptr++;
return *this;
}
const XYVectorIterator& operator++(int){
XYVectorIterator iterator = *this;
++(*this);
return iterator;
}
XYVectorIterator& operator--(){
ptr--;
return *this;
}
XYVectorIterator& operator--(int){
XYVectorIterator Iterator = *this;
--(*this);
return Iterator;
}
XYVectorIterator& operator+(int x){
this->ptr += x;
return *this;
}
XYVectorIterator& operator+=(int x){
this->ptr += x;
return *this;
}
XYVectorIterator& operator-(int x){
this->ptr -= x;
return *this;
}
XYVectorIterator& operator-=(int x){
this->ptr -= x;
return *this;
}
bool operator==(const XYVectorIterator& anotherIterator){
if(this->ptr == anotherIterator.ptr)return true;
return false;
}
bool operator!=(const XYVectorIterator& anotherIterator){
return !(*this == anotherIterator);
}
bool operator<(const XYVectorIterator& anotherIterator){
return (this->ptr < anotherIterator.ptr);
}
bool operator>(const XYVectorIterator& anotherIterator){
return (this->ptr > anotherIterator.ptr);
}
bool operator>=(const XYVectorIterator& anotherIterator){
return (this->ptr >= anotherIterator.ptr);
}
bool operator<=(const XYVectorIterator& anotherIterator){
return (this->ptr <= anotherIterator.ptr);
}
RefrenceType operator[](size_t index){
return *(ptr + index);
}
RefrenceType operator*(){
return *ptr;
}
PointerType operator&(){
return ptr;
}
PointerType operator->(){
return ptr;
}
};
template <class T>
class XYVector{
private:
size_t sz = 0;
size_t capacity = 0;
T* data = nullptr;
public:
using ValueType = T;
using Iterator = XYVectorIterator<XYVector<T>>;
public:
XYVector();
~XYVector();
XYVector(size_t sz);
XYVector(T* arr, size_t n);
XYVector(const XYVector& anotherVector);
XYVector(XYVector&& anotherVector);
XYVector<T>& operator=(const XYVector& anotherVector);
XYVector<T>& operator=(XYVector&& anotherVector);
// Access Operations
const T& operator[](size_t index) const;
T& operator[](size_t index);
// Comparison Operators
bool operator==(const XYVector<T>& anotherVector);
bool operator<(const XYVector<T>& anotherVector);
bool operator>(const XYVector<T>& anotherVector);
// Capacity Operations
size_t Size() const;
size_t Capacity() const;
void reAllocate(size_t newCapacity);
bool empty();
void push_back(const T& value);
T pop_back();
void insert(Iterator& it, T newValue);
void erase(Iterator& it);
void erase(Iterator& it1, Iterator& it2);
void clear();
Iterator begin(){
return Iterator(data);
}
Iterator end(){
return Iterator(data + sz);
}
template<class U>
friend std::ostream& operator<<(std::ostream& out, XYVector<U> data);
};