Skip to content

Latest commit

 

History

History
111 lines (90 loc) · 5.22 KB

Item54.md

File metadata and controls

111 lines (90 loc) · 5.22 KB

항목 54. TR1을 포함한 표준 라이브러리 구성요소와 편안한 친구가 되자

C++98에 명시되어 있는 표준 C++ 라이브러리의 주요 구성 요소

표준 템플릿 라이브러리(Standard Template Library: STL)

  • 컨테이너(vector, string, map 등)
  • 반복자
  • 알고리즘(find, sort, transform 등)
  • 함수 객체(less, greater 등)
  • 컨테이너 어댑터
  • 함수 객체 어댑터(stact, priority_queue, mem_fuc, not1 등)

iostream

  • 사용자 정의 버퍼링
  • 국제화 기능이 가능한 입출력
  • cin, cout, cerr, clog 등의 사전정의 객체

국제화 지원

  • 여러 locale을 활성화시킬 수 있는 기능
  • wchar_t등의 타입(대개 16비트/문자) 및 wstring(wchar_t 타입으로 정의한 string)으로 유니 코드 사용

수치 처리 지원

  • 복소수를 나타내는 템플릿(complex)
  • 수치 배열을 나타내는 템플릿(valarray)

예외 클래스 계통

  • 최상위 클래스인 exception
  • 파생 클래스들(logic_errorruntime_error 등)

C89의 표준 라이브러리

  • 1989년 버전의 C에 포함된 표준 라이브러리

TR1을 통해 명시된 새로운 구성요소

스마트 포인터

  • shared_ptr
    • 기본 제공 포인터와 같으나 하나의 실제 객체를 가리키는 자신과 같은 포인터의 개수를 유지해 놓는 포인터(참조카운팅 기법)
    • 객체를 가리키는 최후의 스마트 포인터가 소멸될 때 그 객체도 자동으로 소멸된다.
  • weak_ptr
    • shared_ptr 사용 시 순환 구조 때문에 각 객체의 참조 카운트가 0이 안될 수가 있다.
    • 이런 상황을 막기 위해 쓰는 포인터이다.

function

  • 어떤 함수가 가진 시그니처와 호환되는 시그니처를 갖는 함수호출성 개체의 표현을 가능하게 해주는 템플릿이다.
  • 시그니처가 비슷하면 호출이 가능한 일반화 콜백 함수를 만들어 보는 것이 주요 개념
// int를 받고 string을 반환하는 함수가 매개변수 타입
void registerCallback(std::string func(int));

// 매개변수 이름으로 쓰인 func는 없어도 되는 선택사항. 위와 동일
void registerCallback(std::string (int));

// string(int)와 호환되는 시그너처를 갖는 어떤 함수호출성 개체도 될 수 있음
void registerCallback(std::function<std::string (int)> func); 
  • function 템플릿을 사용한 registerCallbackint 타입 혹은 int로 변환이 가능한 어떤 타입도 전달 받으며, string 타입 혹은 string으로 변환이 가능한 어떤 타입도 반환할 수 있다.

bind

  • bind1stbind2nd와 똑같이 동작하고 더 많은 기능이 있는 범용 바인더
  • 상수 멤버 함수비상수 멤버 함수에 상관없이 동작
  • 참조로 전달되는 매개변수에 대해서도 동작
  • 외부 보조 없이도 함수 포인터를 자체적으로 다룰 수 있음

해시 테이블

  • 연관 컨테이너
  • unordered_set, unordered_multiset, unordered_map, unordered_multimap
    • set, multiset, map, multimap의 똑같은 이름을 가진 이전의 연관 컨테이너의 인터페이스를 본떠서 만듦
    • set, multiset, map, multimap에 저장되는 원소와 달리 해시 기반 컨테이너는 원소가 저장되는 순서를 예측할 수 없음

정규 표현식

  • 정규 표현식 기반의 탐색과 문자열에 대한 대체 연산 가능
  • 일치되는 원소들 사이의 순회 지원

튜플

  • pair 템플릿의 신세대 버전
  • pair 객체의 경우에는 두 개만 담을 수 있는 반면 tuple 객체는 몇 개라도 담을 수 있음

array

  • begin, end 등의 멤버 함수를 지원하여 STL스럽게 된 배열이다.
  • array 객체의 크기는 컴파일 과정에서 고정 (동적 메모리를 쓰지 않는다!)

mem_fn

  • 멤버 함수 포인터를 적응시키는 용도에 쓸 수 있는 문법적으로 통일을 이룬 템플릿
  • C++98mem_fun, mem_fun_ref를 확장

reference_wrapper

  • 기존의 참조자가 객체처럼 행세할 수 있도록 만들어주는 템플릿
  • 참조자를 담은 것처럼 동작하는 컨테이너를 만들 수 있음

난수 발생

  • C 표준 라이브러리로부터 물려받은 rand함수보다 몇 배는 우수한 난수 발생 기능

특수 용도의 수학 함수

  • 라게르 다항식
  • 베셀 함수
  • 완전 타원 적분
  • 그 외 함수

C99 호환성 확장 기능

  • C99의 라이브러리를 C++로 가져올 목적으로 설계된 함수 및 템플릿

TR1 구성요소의 두 번째 부류

타입 특성정보

  • 주어진 타입에 대한 컴파일 타임 정보를 제공하는 특성정보 클래스의 모음
  • 어떤 T라는 타입에 대해 타입 특성정보 기능을 적용하면 아래 정보들을 알 수 있음
    • T가 기본제공 타입?
    • 가상 소멸자를 지원?
    • 공백 클래스?
    • 다른 U 타입으로 암시적 변환이 가능?
    • 주어진 타입의 적절한 바이트 정렬

result_of

  • 함수 호출의 반환 타입을 추론해 주는 템플릿
  • 함수 반환 타입을 쉽게 참조할 수 있음