4. vector 만들기

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

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

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

물론 vector.h 파일와 algorithm.h 파일을 프로젝트에 추가하세요.

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

3장에서 만든 세 개의 프로젝트에 적용하면 다음과 같은 형태로 작성하면 컴파일 오류가 발생하지 않아요. 이게 이번 장에서 작성할 vector와 알고리즘입니다.

다음은 이번 vector 만들기에서 만들 소스 코드의 뼈대입니다. 간략하게 살펴보세요. 구체적인 실습에서 직접 만들어 볼 코드입니다.

#pragma once
namespace ehlib
{ 
    template<typename Data>
    class vector
    {        
    public:
        class iterator
        {     
        public:
            iterator(Data *pos=0)
            {         
            }
            Data operator *()const
            {
                 return 0;
            }
            int operator-(const iterator &iter)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;



        vector()
        {
        }
        ~vector()
        {         
        }
        void resize(size_t nsize,Data data=0)
        {
        }
        void push_back(Data data)
        {         
        }
        void insert(iterator at, Data data)
        {
        }
        void erase(iterator at)
        {
        }
        Data &operator[] (size_t index)
        {
            throw "잘못된 인덱스를 사용하였습니다.";
        }
        Data &operator[] (size_t index)const
        {
            throw "잘못된 인덱스를 사용하였습니다.";
        }
        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;
        }
        size_t capacity()
        {
            return 0;
        }
    };
}

//algorithm.h
#pragma once
namespace ehlib
{
    template <typename Iter,typename Fun>
    Iter find_if(Iter beg,Iter end,Fun fun)
    {
        return beg;
    }
}