{ 올바른 함수객체를 만들고자 할 때, 일반론으로 만들면 된다. 이때 추가적으로 알아두면 좋은게 있는데, 표준 알고리즘을 사용하다 보면, 특정한 typedef를 요구하는 것들이 있다. 이런 것들을 염려했을 때 unary_function, binary_function 를 고려해 보는게 좋을 것이다. 구글에게 물어보면 자세히 알려 주므로 생략~ 아 생각해 보니까 나는 이것을 잊어 먹었다. 왜냐하면 bind 만 사용하면 손 쉽게 해결 하기 때문이다. }
CPPCS 검색 결과
{ 알고 있겠지만, 함수 객체는 더 빠르게 작동 할 건덕지가 있다. 물론 bind 류 들은 빠른 성능과는 거리가 멀지만 말이다. 테스트를 하면 금방 알수 있으니, 직접 코드를 짜 보는게 좋다. 관련링크 http://ikpil.com/701 }
{ 술어 : predicate 란 true/false 로 리턴하는 함수 객체를 말한다. 왜 순수한 함수로 만들어야 하는가? 알고리즘 속으로 들어간 함수 객체는 그 값이 복사에 의해서 구현부 쪽으로 전달 되어 진다. 이 과정에서 함수 객체의 상태의 현재 상태가 유지되며 전달되기가 어렵기 때문에, 아예 순수하게 만들어서, 사용하는게 더 편하다는 의미에서 순수한 함수로 만들어야 한다는 것이다. 몇가지 술어 함수 만드는 일반론이 있는데, operator() 를 const 로 만들고, 가상 함수가 없도록 하고, 내부 데이터를 쓰지 않는다 라는 일반론이다. 이 이야기는 pimple 이디엄과 맞물리면서 꽤 좋게 생각된다. ^^ 반드시 상태를 가지는 함수 객체여야 한다면, 내부 데이터가 포인터로 유지되게 하면 된다. ..
{ STL 에 있는 정렬 알고리즘으로는 sort 만 써봤다. 물론 전체 sort 이기 때문에 특화된 sort 보다는 느리다. 하지만 실제로 특화 정렬을 할 때가 별로 없었다. 물론 이건 개인적인 경우이므로 이 말은 무시하는게 옳다. 만약, 특별한 경우에 sort 를 해야 한다면, STL 에서 제공하는 정렬 알고리즘을 알고 있으면 도움이 될 것이다. 또는 자신이 직접 알고리즘을 작성해도 될 것이다. 하지만 주제가 STL 이므로, 생략한다. STL 정렬 알고리즘으로는 partition, stable_partition, nth_element, partial_sort, sort, stable_sort 가 있다. 구글에게 물어 보면 자세히 나오니 한번 물어 보는게 좋을 것이라고 생각 한다. }
{ 현재의 STL 검색 알고리즘에는 순차 검색과, 이진 검색 밖에 없는데, 순차 검색은 값들이 정렬되어 있지 않은 상태일 때 많이 쓰이고, 이진 검색은 정렬된 데이터에서 많이 사용 한다. 순차 검색으로는 find/find_if, count/count_if 가 있으며, 이진 검색으로는 lower_bound, upper_bound, equal_range 또는 binary_search 가 있다. 각각 검색하면 자세히 나오므로 여기서 생략한다. }
{ STL에서 전체의 요소에 특정 작업을 하고 싶을 때, 루프로 for문을 많이 사용한다. 이것을 알기에 좀더 편하게 사용 할 수 있는 알고리즘인 for_each가 있다. for_each는 루프를 대신해서 사용 할수 있으며, 보다 독립적인 구조를 유지 할 수 있게 해 준다. 그래서인지 for_each 를 사용했던 사람은 for 문보다 for_each를 더 많이 사용 한다. for_each를 사용 할 때는 함수 객체를 붙여 줄 수 있는데, 간단한 것이라면 boost 의 Lambda 를 사용하면 더 편해진다. 무슨 말이 필요 할까, 그냥 내가 만들어본 예제코드를 보자. #include #include #include #include // ikpil.com int main( void ) { //using na..
최근댓글