여러 템플릿들

보물창고·2021년 8월 3일
0

class template

: stl 컨테이너에서 널리 사용되어 지고 잇다.

vector ints;
vectordbs;
vectorcat;
-> 자료형에 따라 컨테이너가 구성되는 것을 알고 있다.


-> 주의 깊게 봐야 할 곳은 push에서 move하는 부분이다.
main 부에서 매개인자로 들어오는 값들은 Rvalue이기 때문에
push의 elem 매개변수는 복사 대입을 하지 않는다.
컴파일러가 이미 1,2,3값이 사라지는 것을 알기 때문에 복사대입이 아니면
copy elision 동작을 하기 때문이다.

  • 그리고 push의 매개변수를 레퍼런스 타입으로는 받을 수 없다.
    왜냐하면 상수는 주소값이 없기 때문에

    위의 코드 업그레이드!

  • 실제 stack의 push 함수의 매개변수를 보면 오버로딩이 2개가 있다.
    1) rValue

    2) lValue를 구분햇으므로

  • 구현부

  • 호출부

    -> Rvalue와 LValue 모두 push 가능하도록 만들엇따.

소스코드

template <typename T>
class Stack
{
private : 
	vector<T>mVec;
public : 

	void push(T&& elem)
	{
		mVec.emplace_back(move(elem));
	}

	void push(const T& elem)
	{
		mVec.emplace_back(move(elem));
	}

	bool pop(T& elem)
	{
		if (mVec.size() == 0)
			return false;
		elem = mVec[mVec.size() - 1];
		mVec.pop_back();
		return true;
	}
};

int main()
{
	Stack<int> stack;
	stack.push(1);
	stack.push(2);
	stack.push(3);

	int g = 4;
	stack.push(g);

	int n;
	while (stack.pop(n))
	{
		cout << n << endl;
	}

	return 0;
}
profile
🔥🔥🔥

0개의 댓글