0x00 dynamic array (array length of the telescopic)
#pragma once
#ifdef ARRAY_H
#define ARRAY_H
template <class T>
class Array {
private:
T* list;
int size;
public:
Array(int sz = 50);
Array(const Array<T>& arr);
~Array();
Array<T>& operator = (const Array<T>& rhs);
T& operator [] (int i);
const T& operator [] (int i) const;
operator T * ();
operator const T* () const;
int getSize() const;
void resize(int sz);
}
template <class T> Array<T>::Array(int sz) {
assert(sz >= 0);
size = sz;
list = new T[size];
}
template <class T> Array<T>::~Array() {
delete[] list;
}
template<class T> Array<T>& Array<T>::operator=(const Array<T>& rhs)
{
if (&rhs != this) {
if (size != rhs.size)
{
delete[] list;
size = rhs.size;
list = new T[size];
}
for (int i = 0; i< size; i++)
{
list[i] = rhs.list[i];
}
return *this;
}
}
template<class T> T& Array<T>::operator[](int i)
{
assert(n >= 0 && n < size);
return list[i];
}
template<class T> const T& Array<T>::operator[](int i) const
{
assert(n >= 0 && n < size);
return list[i];
}
template<class T> Array<T>::operator T * ()
{
return list;
}
template<class T> Array<T>::operator const T* () const
{
return list;
}
template<class T> int Array<T>::getSize() const
{
return size;
}
template<class T> void Array<T>::resize(int sz)
{
assert(sz >= 0);
if (sz = size) return;
T* newList = new T[sz];
int n = (sz < size) ? sz : size;
for (int i = 0; i < n; i++)
{
newList[i] = list[i];
}
delete[] list;
list = newList;
size = sz;
}
template <class T> Array<T>::Array(const Array<T>& arr) {
size = arr.size;
list = new T[size];
for (int i = 0; i < size; i++) {
list[i] = a.list[i];
}
}
#endif