10. STL: Algorithms

STL 알고리즘 활용법을 알아보자.

83. Use a checked STL implementation.

안전성이 먼저다. 체크된 STL 구현을 써라. 그것이 컴파일러 플랫폼 중 하나에서만 쓸 수 있고, 그것이 릴리즈 이전 테스팅에만 쓰여질지라도.

84. Prefer algorithm calls to handwritten loops.

함수 오브젝트를 신중하게 써라. 매우 간단한 반복문에 대해서는 손으로 써진 반복문들은 가장 간단할 수 있고 가장 효율적인 해법일 수 있다. 하지만 손으로 써진 반복문들 대신 알고리즘 호출을 쓰는 것은 더 표현적이고 유지보수 가능하고 덜 에러에 취약하고 효율적이다.

알고리즘을 호출할 때, 필요한 로직을 캡슐화하는 함수 오브젝트를 쓰는 것을 고려하라. 명료함을 떨어트리는 std::bind 대신 람다를 고려하라.

85. Use the right STL search algorithm.

충분한 것만 탐색하라. 올바른 탐색은 STL일 수도 있고 (빛보다 느리지만) 이는 그래도 상당히 빠르다. 이 항목은 범위 내 특정 값을 탐색하는 것이나, 범위 내 특정 값이 있어야 할 위치를 찾는 것에 적용된다. 정렬되지 않은 범위에서 탐색한다면, find/find_if나 count/count_if를 써라. 정렬된 범위를 탐색한다면, lower_bound, upper_bound, equal_range, binary_search를 써라. (그 범용적 이름에도 불구하고, binary_search는 대개 좋은 선택이 아니다.)

86. Use the right STL sort algorithm.

충분한 것만 정렬하라. 각 정렬 알고리즘이 하는 일을 이해하고, 필요한 것 중 가장 연산이 적게 드는 알고리즘을 사용하라.

87. Make predicates pure functions.

순수성에 입각하라. 술부는 예/아니오 답을 반환하는 함수 오브젝트로, 대개 bool 값을 반환한다. 함수는 그 값이 그 인자들에만 의존할 때 수학적 의미로 순수하다고 한다. (이 순수라는 것은 순수 가상 함수랑은 상관없다)

술부들이 그 operator()의 결과에 영향을 미치는 상태를 들고 있거나 접근하도록 하지 말아라. 이는 멤버와 전역 상태를 포함한다. 술부에 대해서는 operator()를 const 멤버 함수로 만드는 것을 선호하라.

88. Prefer function objects over functions as algorithm and comparer arguments.

오브젝트는 함수보다 더 잘 끼워진다. 알고리즘에 함수보다는 함수 오브젝트를 전달하는 것을 선호하라. 연관 컨테이너에 대한 비교 함수는 함수 오브젝트여야 한다. 함수 오브젝트는 적응적이고, 직관과는 다르게, 대개 함수보다 더 빠른 코드를 제공한다.

89. Write function objects correctly.

싸고 적응적이도록 하라. 함수 오브젝트들이 복사하기 쉬운 값들이 되도록 하라. std::function을 상속하도록 하라.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중