#1. [레거시 C++ STL] 일반화 프로그래밍
일반화 프로그래밍이 적합한 코드 구조를 억지로 인터페이스화 하지 마라.
일반화 프로그래밍이 적합한 코드 구조를 억지로 인터페이스화 하지 마라.
템플릿은 템플릿 인스턴스화 하기 전에는 코드를 생성하지 않는다. 클래스, 함수, 멤버 함수, 중첩 클래스를 템플릿으로 만들 수 있다.
일반화 프로그래밍에서의 다형적 동작을 위해 템플릿 특수화, 템플릿 부분 특수화, 함수 템플릿 특수화, 함수 오버로딩을 이용하라. 함수 템플릿을 정의할때 함수 템플릿 오버로딩과 함수 템플릿 특수화의 순서를 지켜라.
종속 타입인 경우 typename, 템플릿 파싱 오류시 template을 작성하라.
함수 템플릿 오버로딩시에는 T보다는 T* 보다는 const T*가 선택된다. 연산자 오버로딩은 비멤버 함수 템플릿으로 작성하라. 함수 템플릿 인수 추론시 T&는 T로 추론된다.
타입 특성 클래스를 이용하여 템플릿 인자와 코딩 계약을 맺어라. 타입 특성 클래스를 이용하여 타입 처리 방식을 응집하라.
Standard Template Library(STL) 의 주요 구성 요소는 하기와 같습니다.
모던 C++ (C++11~) tuple이 추가되어 다수의 요소를 관리할 수 있는 데이터 전달용 개체를 좀 더 간편하게 만들 수 있습니다. (C++17~) 구조화된 바인딩이 추가되어 배열, pair, tuple, 클래스등의 내부 요소나 멤버 변수에 쉽게 접근...
삽입/삭제 성능, 검색 성능, 노드 구성 용량 부하를 검토하여 최적의 컨테이너를 선택하라. 컨테이너의 변경이 용이하도록 코딩하라. 컨테이너 종류나 사용하는 알고리즘에 따라 복사 생성자, 복사 대입 연산자, 비교 연산자를 구현하라.
컨테이너 멤버 함수 erase()와 알고리즘 remove() 함수의 차이를 알아둬라. 컨테이너는 삽입한 요소의 복제본을 관리한다. 원본을 관리하려면 포인터를 이용하라.
이터레이터는 전위 증가 연산자를 사용하라. for()를 이용하여 이터레이터를 순차 탐색 할때 itr < endItr보다는 itr != endItr을 사용하라.
swap()을 이용하여 vector가 할당한 메모리 영역을 해제할 수 있다. vector<bool>은 사용하지 마라.
모던 C++ (C++17~) polymorphic_allocator가 추가되어 할당시 런타임 다형성을 지원합니다. 메모리 리소스를 사용하여 메모리 풀을 손쉽게 만들 수 있습니다.
컨테이너에 알고리즘의 멤버 버전이 있다면, 멤버 버전이 효율이 더 좋다.
모던 C++ (C++11~) 람다 표현식이 추가되어 1회용 익명 함수를 만들 수 있습니다. (C++11~) function이 추가되어 ()로 호출 가능한 함수자를 저장할 수 있습니다. (C++11~) mem_fn()이 추가되었습니다. 인자가 있는 멤...
string과 wstring은 public Non-Virtual 소멸자이므로 상속하여 재구현 하지 마라. 수정될 필요가 없는 문자열 데이터는 const char* 나 const wchar_t*로 관리하라.(배열이나 string, wstring을 쓰면 복제된다....
auto_ptr은 deprecate 되었으니 더이상 사용하지 마라. 복사 부하, 상수성, 스마트 포인터를 이용하여 좀더 단단한 코딩 계약을 만들어라.
모던 C++ (C++11~) constexpr이 추가되어 컴파일 타임 프로그래밍이 강화됐습니다. (C++11~) static_assert()가 추가되어 컴파일 타임 진단이 가능해 졌습니다. (C++11~) noexcept 연산자가 추가되어 해당 함수...