본 프로젝트의 개요와 프로젝트를 진행하기 위한 개념 확립
본 프로젝트의 목표는 다양한 C++ STL(Standard Template Library) Container 타입들을 구현하는 것이다. 각각의 컨테이너들을 reference를 참고해 <container>.hpp
형식의 파일안에 적절한 클래스들을 작성해 구현하면 된다. Reference에서 Orthodox Canonical form이 아닌 것들은 이 form대로 구현하지 않아도 된다. C++98 버전의 코드를 작성해야하므로 해당 버전이 아닌 기능들은 구현하지 않아야한다.
구현해야할 컨테이너들은 다음과 같다 :
vector
vector<bool>
은 하지 않아도 된다. map
stack
vector
클래스를 기본 기저 컨테이너로 사용하되, STL의 stack
이 포함하는 다른 컨테이너들과도 호환되어야 한다.set
(Bonus Part)또한 다음의 기능들도 구현해야 한다 :
iterators_traits
reverse_iterator
enable_if
is_integral
SFINAE
를 발견하게 해준다.SFINAE
: Substitution failure is not an errorequal
and/or lexicographical_compare
std::pair
std::make_pair
namespace
는 반드시 ft
여야하고, 표준 컨테이너의 모든 멤버 함수, 비멤버 함수와 오버로딩을 구현해야 한다. Iterator
가 있다면 그 또한 구현해야 한다. std::allocator
를 사용해야 하며, 비멤버 오버로딩의 경우, 정당한 상황에만 friend
키워드가 허용되지만, map::value_compare
의 구현에서는 friend
키워드가 허용된다.
디펜스 시, 주어진 main.cpp
이상의 테스트를 제공해야 하며, STL의 컨테이너와 직접 구현한 컨테이너를 결과와 퍼포먼스 / 시간을 비교하면서 테스트를 진행해야 한다. STL의 컨테이너보다 최대 20배까지 느려도 된다.
References
https://cdn.intra.42.fr/pdf/pdf/49410/en.subject.pdf