5. list 만들기

이번에는 STL의 list를 모델 삼아 list를 만들어 보기로 해요.

4장에서는 vector를 만들었습니다. 그 프로젝트에서 헤더파일 포함문과 using 문만 변경하세요.

//#include <vector>
//#include <algorithm>
//using std::vector;
//using std::find;
//using std::find_if;
#include "list.h"
#include "algorithm.h"
using ehlib::list;
typedef list<Genre *> Genres;
typedef Genres::iterator GIter;
typedef Genres::const_iterator GCIter;

물론 list.h 파일과 algorithm.h 파일을 프로젝트에 추가하세요. alogorithm은 4장에서 만든 것과 똑같습니다.

현재 구현한 것이 없기 때문에 프로젝트를 다시 빌드하면 컴파일 오류가 날 거예요. 오류가 나는 것을 하나 하나 수정하여 컴파일 오류만 나지 않게 하세요. 물론 코드 내부는 비어있는 상태입니다.

vector에서는 인덱스 연산자를 제공하지만 list에서는 인덱스 연산자를 제공하지 않습니다. 따라서 list는 순차적으로 보관하거나 특정 키 순으로 보관할 수 있지만 인덱스 연산은 사용할 수 없습니다. 또한 순차적으로 보관하거나 특정 키 순으로 보관하는 것은 list와 사용 방법이 같습니다.

4장에서 만든 세 개의 프로젝트 중에 순차적으로 보관하는 프로젝트와 특정 키 순으로 적용하면 다음과 같은 형태로 작성하면 컴파일 오류가 발생하지 않아요. 이게 이번 장에서 작성할 list의 뼈대입니다.

//list.h
#pragma once
namespace ehlib
{ 
    template<typename Data>
    class list
    {
    public:
        class iterator
        {
        public:
            iterator()
            {         
            }
            Data operator *()const
            {
                 return 0;
            }
            iterator &operator++()
            {
                return (*this);
            }
            const iterator operator++(int)
            {
                iterator re(*this);
                return re;
            }
            bool operator !=(const iterator &iter)const
            {
                return false;
            }
            bool operator ==(const iterator &iter)const
            {
                return false;
            }
        };
        typedef iterator const_iterator;
        list()
        {
        }
        ~list()
        {         
        }
        void push_back(Data data)
        {         
        }
        void insert(iterator at, Data data)
        {
        }
        void erase(iterator at)
        {
        }        
        iterator begin()
        {
            iterator iter;
            return iter;
        }
        iterator end()
        {            
            iterator iter;
            return iter;
        }
        const_iterator begin()const
        {
            iterator iter;
            return iter;
        }
        const_iterator end()const
        {            
            iterator iter;
            return iter;
        }
        size_t size()
        {
            return 0;
        }        
    };
}