SW/C++

C++ : 템플릿 활용 : 고정형 사이즈 벡터 만드는 예제

얇은생각 2020. 4. 22. 07:30
반응형

C++ : 템플릿 활용 : 고정형 사이즈 벡터 만드는 예제

 

FixedVector.h

#pragma once

namespace samples
{
	template<typename T, size_t N>
	class FixedVector
	{
	public:
		FixedVector();

		bool Add(const T& data);
		size_t GetSize() const;
		size_t GetCapacity() const;

	private:
		size_t mSize;
		T mArray[N];
	};

	template<typename T, size_t N>
	FixedVector<T, N>::FixedVector()
		: mSize(0)
	{
	}

	template<typename T, size_t N>
	size_t FixedVector<T, N>::GetSize() const
	{
		return mSize;
	}

	template<typename T, size_t N>
	size_t FixedVector<T, N>::GetCapacity() const
	{
		return N;
	}

	template<typename T, size_t N>
	bool FixedVector<T, N>::Add(const T& data)
	{
		if (mSize >= N)
		{
			return false;
		}

		mArray[mSize++] = data;

		return true;
	}
}

 

 

 

FixedVectorExample.cpp

#include <iostream>
#include "FixedVector.h"
#include "FixedVectorExample.h"
#include "IntVector.h"

using namespace std;

namespace samples
{
	void FixedVectorExample()
	{
		FixedVector<int, 3> scores;
		scores.Add(10);
		scores.Add(50);
		
		cout << "scores - <Size, Capacity>: " << "<" << scores.GetSize()
			<< ", " << scores.GetCapacity() << ">" << endl;

		FixedVector<IntVector, 5> intVectors;
		intVectors.Add(IntVector(2, 5));
		intVectors.Add(IntVector(4, 30));
		intVectors.Add(IntVector(22, 3));

		cout << "intVectors - <Size, Capacity>: " << "<" << intVectors.GetSize()
			<< ", " << intVectors.GetCapacity() << ">" << endl;

		FixedVector<IntVector*, 4> intVectors2;

		IntVector* intVector = new IntVector(3, 2);
		intVectors2.Add(intVector);
		
		cout << "intVectors2 - <Size, Capacity>: " << "<" << intVectors2.GetSize()
			<< ", " << intVectors2.GetCapacity() << ">" << endl;

		delete intVector;
	}
}

 

고정형 사이즈 벡터를 만드는 방법을 템플릿을 활용하여 구현한 예제입니다. 이처럼 STL 고정 라이브러리에 필요한 기능들을 개발자가 추가하여서 활용할 수 있다는 것을 알 수 있었습니다. 

 

원본 코드는 아래 경로에서 확인할 수 있습니다.

https://github.com/POCU/COMP3200CodeSamples/blob/master/09/FixedVector.h

 

POCU/COMP3200CodeSamples

Code samples for COMP3200. Contribute to POCU/COMP3200CodeSamples development by creating an account on GitHub.

github.com

반응형