이번에는 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; } }