CPP-Advance-HomeWorks/Vector.h

100 lines
1.4 KiB
C
Raw Normal View History

2024-06-10 18:30:22 +00:00
#pragma once
#include <iostream>
template <class T>
class Vector
{
public:
Vector(unsigned int Size=0,T init=NULL);
void Resize(unsigned int newSize,T init=NULL);
void PushBack(T a);
~Vector();
unsigned int GetSize() { return m_size; };
T& operator[](int index);
private:
unsigned int m_size;
T* m_data =nullptr;
};
template<class T>
Vector<T>::Vector(unsigned int Size, T init )
:m_size(Size)
{
m_data = new T[m_size];
for (size_t i = 0; i < m_size; i++)
{
m_data[i] = init;
}
}
template<class T>
void Vector<T>::Resize(unsigned int newSize,T init)
{
if (newSize == m_size) return;
T* temp = m_data;
m_data = new T[newSize];
for (size_t i = 0; i < newSize; i++)
{
if (i < m_size) m_data[i] = temp[i];
else m_data[i] = init;
}
m_size = newSize;
delete[] temp;
}
template<class T>
void Vector<T>::PushBack(T a)
{
Resize(m_size + 1);
m_data[m_size-1] = a;
}
template<class T>
Vector<T>::~Vector()
{
delete[] m_data;
}
template<class T>
T& Vector<T>::operator[](int index)
{
if (index >= m_size) {
std::cout << "Array index out of bound, exiting";
exit(0);
}
return m_data[index];
}
template<class T>
std::ostream& operator<< (std::ostream& out, Vector<T>& a)
{
unsigned int len = a.GetSize();
for (size_t i = 0; i < len; i++)
{
out << a[i] ;
if (i < len - 1) out << ',';
}
return out;
}