열렬히.뛰기

Cpp module 08

école 42 > Cpp part.1 > 42 : Cpp 모듈 > Cpp module 08

STL을 처음으로 사용하는 과제

ex00

  • 특정 자료구조에서 원소가 몇 번째에 속하는지 찾는 easyfind() 함수를 만들 것.
  • 자료구조(컨테이너)는 아무거나 상관없음. 단, 원소는 반드시 int여야만 함.

ex01

  • n개의 정수를 담을 수 있는 Span 클래스를 만들기.
  • 자료구조 속에 숫자들이 있다고 가정하자. 임의의 숫자 두 개의 차이 중에서, 가장 긴 것을 longestSpan, 짧은 것을 shortestSpan 이라고 하자.
cpp
class Span{
	private:
		vector<int> vec;
		int maxsize;
};

ex02

  • iterator가 있는 Stack을 MutantStack 클래스로 작성
  • Stack을 상속받고, iterator 기능을 추가해야 함.

기본적으로 Stack이 어떻게 생겼는지 보자.

cpp
template <class _Tp, class _Container = deque<_Tp> > class _LIBCPP_TEMPLATE_VIS stack;

template <class _Tp, class _Container /*= deque<_Tp>*/>
class _LIBCPP_TEMPLATE_VIS stack
{
public:
    typedef _Container                               container_type;
    typedef typename container_type::value_type      value_type;
    typedef typename container_type::reference       reference;
    typedef typename container_type::const_reference const_reference;
    typedef typename container_type::size_type       size_type;
    static_assert((is_same<_Tp, value_type>::value), "" );

protected:
    container_type c;
  • deque 컨테이너를 기반으로 만들어진 것이 Stack.
    • deque의 일부 함수를 막아두었다고 봐도 될 것 같다.
    • Stack 안에 container_type이라는 것이 있고, 거기에 stack에서 쓸 수 있는 함수를
  • 따라서 deque을 이용해서 iterator를 만드려면, 다음과 같이 하면 된다.
cpp
typedef typename MutantStack<T>::stack::container_type::iterator iterator;

// MutantStack 안에 stack 안에 container_type 안에 iterator 타입을 새롭게 정의