기록

231220 Death's Door project 설명 영상 제작, vector 자료구조 만들어보기

hayo_su 2023. 12. 20. 15:22

데스도어 모작 팀 프로젝트

 

 

 

 

vector

template <typename T>
class vector
{
public:

	// 생성자 
	vector(const int& temp = 10) {
		arr = new T[temp];
		m_size = 0;
		m_capacity = temp;
	}

	// 소멸자
	~vector() {
		delete[] arr;
		arr = nullptr;
	}


	T& operator[](size_t index)
	{
		if (index >= m_size)
		{
			// 오류메세지
			return nullptr;
		}
		return arr[index];
	}

	void push_back(const T& num)
	{
		if (m_capacity <= m_size) {						//capacity가 size보다 작거나 클때 작업
			reserve(m_size);
			m_capacity *= 2;				
			T* Tmparr = new T[m_capacity];
			memcpy(Tmparr, arr, sizeof(T) * m_size);
			delete[] arr;
			arr = Tmparr;
		}
		arr[m_size++] = num;
	}

	void pop_back()
	{
		m_size--;
	}

	T& end() const
	{
		return arr + m_size;
	}
	
	T& begin() const
	{
		return arr;
	}

	void erase(int* _iter)
	{

	}

	void resize(const size_t n, T val = 0)
	{
		if (n <= m_size)
		{
			return;
		}
		reserve(n);
		for (size_t i = m_size; i < n; ++i)
		{
			arr[m_size++] = val	;
		}
	}

	void reserve(int n)
	{
		if (n <= m_capacity)
			return;

		m_capacity = n;
		T* TmpArr = new T[m_capacity];
		memcpy(TmpArr, arr, sizeof(T) * m_size);
		delete[] arr;
		arr = TmpArr;
	}

	//vector.size()
	size_t size()
	{
		return m_size;
	}

	//vector.capacty()
	size_t capacity() 
	{									
		return m_capacity;
	}

	void clear()
	{
		m_size = 0;
	}

	bool empty()
	{
		return static_cast<bool>(m_size);
	}
private:

	T* arr;
	size_t m_size;
	size_t m_capacity;
};

 

 

list