{ 술어 : 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..
{ 검증된 STL은 여러개가 있다.(sgi 밖에 모르지만 나는...) 기본적으로 VC2003 이상이면 내장된 STL은 좋은 편이고, g++ 은 모르겠으나, 더 좋으면 좋았지 나쁘진 않을 것이다. boost 의 STL 쪽도 굉장히 괜찮으니, 그것을 써도 될 것이다. STL 을 사용함에 있어 몇가지 주의해야 할 것이 있는데, 반복자 : iterator 의 사용에서 많이 발생하므로, 표준문서나 C+ Standard Library 책을 보면 자세히 알아 두는게 좋을 것이라고 생각 된다. 참고로 반복자가 이상해 질것 같은 STL 함수들은 전부 반복자를 벹어내니 그것을 사용하면 문제는 없다. 부수적으로 STL이 나쁘거나 좋다고 하지만, 용도에 맞게 쓰면 독도 명약이고 명약이라도 나쁘게 쓰면 독이라는 말이 있듯이, ..
최근댓글