본문 바로가기

Programings/Data Structs

RVector

반응형
#include <vector>

/**************************************************
장점 : 빠른 접근
단점 : 앞쪽으로 넣을 수록 데이터를 뒤로 보내는 작업이 발생함
주의 : 템플릿은 H파일과 C파일로 나누지 않는 것이 좋음 
**************************************************/


template<typename T>
class RVector : public std::vector<T>
{
private:
	typename std::vector<T>::iterator it;

	void count(int i)
	{
		it = begin();
		for(int k=0; k<i && k<getSize(); k++)
			it++;
	}
	void countR(int i)
	{
		it = end();
		for(int k=0; k<i && k<getSize(); k++)
			it--;
	}
	
public:
	T getFirst(){ return front(); }
	T getLast() { return back(); }
	int getSize(){ return vector<T>::size(); }
	T getAt(int i)
	{ 
		if(i < getSize())
			return at(i); 
		return NULL;
	}
	T getAtReverse(int i)
	{ 
		if(i < getSize())
		{
			i = size() - i -1;
			return at(i); 
		}
		return NULL;
	}

	void insertAt(int i, const T& a)
	{
		count(i);
		insert(it, a);
	}
	void insertAtReverse(int i, const T& a)
	{
		countR(i);
		insert(it, a);
	}
	void insertAtFirst(const T& a){ insert(begin(), a); }
	void insertAtLast(const T& a){ push_back(a); }
	void replaceAt(int i, const T& a)
	{
		count(i);
		it = erase(it);
		insert(it, a);
	}
	void replaceAtReverse(int i, const T& a)
	{
		countR(i);
		erase(it);
		it = erase(it);
		insert(it, a);
	}
	void removeAt(int i)
	{
		count(i);
		erase(it);
	}
	void removeAtReverse(int i)
	{
		countR(i);
		erase(it);
	}
};
반응형