2019-12-03 13:50:25 +01:00
|
|
|
#ifndef ARRAY_HH
|
|
|
|
#define ARRAY_HH
|
|
|
|
|
2020-01-06 13:28:39 +01:00
|
|
|
template<class T>
|
2019-12-03 13:50:25 +01:00
|
|
|
class Array {
|
|
|
|
public:
|
2020-01-06 13:28:39 +01:00
|
|
|
Array(int size, T default_value) : _size(size) {
|
|
|
|
_arr = new T[_size] ;
|
|
|
|
_default = default_value;
|
2019-12-03 13:50:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
Array(const Array& other) : _size(other._size) {
|
2020-01-06 13:28:39 +01:00
|
|
|
_arr = new T[other._size] ;
|
2020-07-01 17:47:24 +02:00
|
|
|
_default = other._default;
|
2019-12-03 13:50:25 +01:00
|
|
|
|
|
|
|
// Copy elements
|
|
|
|
for (int i=0 ; i<_size ; i++) {
|
|
|
|
_arr[i] = other._arr[i] ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
~Array() {
|
|
|
|
delete[] _arr ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Array& operator=(const Array& other)
|
|
|
|
{
|
|
|
|
if (&other==this) return *this ;
|
|
|
|
if (_size != other._size) {
|
|
|
|
resize(other._size) ;
|
|
|
|
}
|
|
|
|
for (int i=0 ; i<_size ; i++) {
|
|
|
|
_arr[i] = other._arr[i] ;
|
|
|
|
}
|
|
|
|
return *this ;
|
|
|
|
}
|
|
|
|
|
2020-01-06 13:28:39 +01:00
|
|
|
T& operator[](int index) {
|
|
|
|
if ( index > _size ) {
|
|
|
|
resize(index+1);
|
|
|
|
}
|
|
|
|
|
2019-12-03 13:50:25 +01:00
|
|
|
return _arr[index] ;
|
|
|
|
}
|
2020-01-06 13:28:39 +01:00
|
|
|
const T& operator[](int index) const {
|
2019-12-03 13:50:25 +01:00
|
|
|
return _arr[index] ;
|
|
|
|
}
|
|
|
|
|
|
|
|
int size() const { return _size ; }
|
|
|
|
|
|
|
|
void resize(int newSize) {
|
|
|
|
// Allocate new array
|
2020-01-06 13:28:39 +01:00
|
|
|
T* newArr = new T[newSize] ;
|
2019-12-03 13:50:25 +01:00
|
|
|
|
|
|
|
// Copy elements
|
|
|
|
for (int i=0 ; i<_size ; i++) {
|
|
|
|
newArr[i] = _arr[i] ;
|
|
|
|
}
|
|
|
|
|
2020-01-06 13:28:39 +01:00
|
|
|
for ( int i=_size ; i<newSize ; i++ ) {
|
|
|
|
newArr[i] = _default;
|
|
|
|
}
|
|
|
|
|
2019-12-03 13:50:25 +01:00
|
|
|
// Delete old array and install new one
|
|
|
|
delete[] _arr ;
|
|
|
|
_size = newSize ;
|
|
|
|
_arr = newArr ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
int _size ;
|
2020-01-06 13:28:39 +01:00
|
|
|
T* _arr ;
|
|
|
|
T _default ;
|
2019-12-03 13:50:25 +01:00
|
|
|
} ;
|
|
|
|
|
|
|
|
#endif
|