Skip to content

ebbll/42_ft_containers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

서브젝트 번역

Chapter 1. 목표

C++ STL 중 몇 가지 컨테이너를 구현해 보기 각 표준 컨테이너의 구조를 참고하기. 만약 해당 표준 컨테이너에 Orthodox Canonical form이 없으면, 구현하지 말기 C++98 표준을 따라야 하며, 따라서 해당 컨테이너의 98 이후 버전에 생긴 특성은 절대로 구현하면 안 됨. 하지만 98 버전의 모든 특성은 반드시 구현되어야 함(만약 현재는 사라진 특성이 98에 있다면, 그것도 구현해야 함)

Chapter 2. 일반 규칙

  1. 컴파일
    • c++로 컴파일 하며, -Wall -Wextra -Werror 플래그를 포함함
    • -std=c++98 플래그가 들어가더라도 코드가 동작해야 함
  2. 형식 및 이름 컨벤션
    • 각 컨테이너 마다 클래스 이름을 적절하게 명명해야 함
    • 노미넷 없음! 원하는 코딩 스타일에 따르기. 단, 평가자가 이해할 수 없는 코드는 채점되지 않음. 깨끗하고 가독성 높은 코드를 짜기 위해 최선을 다해야 함
  3. 허용 및 금지 이제 C가 아닌 C++로 코딩하기 때문에,
    • 표준 라이브러리의 모든 것을 사용할 수 있음. 따라서, 이미 알고 있던 방식과 C 스타일의 함수 사용을 벗어나 C++스러운 버전을 사용하는 것이 좋음
    • 하지만, 다른 외부 라이브러리의 사용은 금지됨. C++11 및 파생 버전, 그리고 Boost 라이브러리를 사용할 수 없음. printf(), alloc(), free() 함수는 금지되며, 사용한 경우 0점으로 처리됨
  4. 몇 가지 디자인적 요구사항
    • C++에서도 메모리 누수는 여전히 발생함. 메모리를 할당한 경우, 반드시 메모리 누수를 방지해야 함
    • 헤더 파일에 함수를 구현한 경우 0점으로 처리됨 (함수 템플릿은 제외)
    • 헤더는 서로 독립되게 사용되어야 함. 따라서 각각의 헤더에 필요한 것을 모두 include 해야 함. 그러나 인클루드 가드를 통해 더블 인클루드를 막을 수 있을 것임. 이 항목이 만족되지 않은 경우, 0점으로 처리됨
  5. 추가 정보
    • 필요한 경우, 코드를 나누거나 작업물을 정돈하기 위해 파일을 추가로 만들어도 됨. 그 대신 mandatory 파일은 반드시 있어야 함. 추가만 가능

Chapter 3. Mandatory

다음의 컨테이너를 구현하고, .hpp 파일을 제출하시오

  • vector vector 은 구현할 필요 없음
  • map
  • stack 디폴트 기저 컨테이너로 vector 클래스를 사용함. 단, STL 컨테이너가 포함된 다른 컨테이너들과도 여전히 호환 가능해야 함 stack을 구현하지 않아도 과제 통과 가능함(80점). 그러나 만약 보너스까지 완성하고 싶다면, 반드시 위 3가지 컨테이너를 구현해야 함

다음의 것들도 구현해야 함

  • iterators_traits
  • reverse_iterator
  • enable_if 이것은 C++11 특성이긴 하지만 C++98 방식으로 구현할 수 있음. 이 특성의 구현은 당신이 SFINAE를 발견?할 수 있도록 하기 위해 요구된 것임
  • is_integral
  • equal 또는 lexicographical_compare (둘 다 구현해도 되고, 둘 중 하나만 구현해도 됨)
  • std::pair
  • std::make_pair

요구사항

  • namespace는 ft여야 함
  • 각각의 컨테이너에 사용되는 내부 자료구조는 논리적이고 정당해야 함 (예를 들면 map에 단순한 array를 사용하면 안 된다는 뜻)
  • 표준 컨테이너에서 제공하는 것보다 더 많은 public 함수를 구현하면 안 됨. 추가로 구현한 것은 반드시 private나 public이어야 함. 각각의 public 함수와 public 변수는 정당해야 함
  • 표준 컨테이너의 모든 멤버 함수, 비멤버 함수 및 오버로드를 구현해야 함
  • 기존의 명명을 그대로 따라야 함. 디테일에 주의할 것
  • 만약 해당 컨테이너에 iterator 체계가 있으면 구현해야 함
  • 반드시 std::allocator를 사용해야 함
  • 비멤버 오버로드의 경우, friend 키워드의 사용을 허용함. friend는 정당한 경우에 사용되어야 하며, 평가 중 확인될 것임
  • 물론 map::value_compare를 구현할 때 friend 키워드를 사용할 수 있음

참고 https://www.cplusplus.com/ https://cppreference.com/

구현 테스트

  • 디펜스를 위해 적어도 main.cpp를 제출해야 함. 서브젝트와 함께 제공되는 main.cpp 파일보다 더 많은 테스트 코드를 작성할 것
  • 같은 테스트를 두 바이너리에 적용해 동작 비교하기: 하나는 우리가 구현한 컨테이너, 다른 하나는 STL 컨테이너
  • 출력, 성능 및 타이밍 비교하기 - 우리가 구현한 컨테이너는 최대 20배 정도까지 느릴 수 있음
  • 구현한 컨테이너를 ft::로 테스트 하기

Chapter 4. 보너스

Chapter 5. 제출 및 동료 평가

평소처럼 Git repo에 과제 제출 repo 안에 있는 작업물만 평가될 것임 파일 이름이 정확한 지 꼭 두 번 체크하기 표준 컨테이너의 명명법을 따랐는지 꼭 한 번 더 체크하기

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published