2. 5 find , find_if 만들어보기
STL의 algorithm에서는 일반적으로 사용할 수 있는 다양한 함수들을 제공하고 있습니다. 이 중에 여기에서는 find와 find_if를 만들어 봅시다.
find에서는 특정 구간 사이에 호출자가 원하는 자료가 보관된 위치를 찾는 함수입니다. 즉, 첫 번째 입력 인자와 두 번째 입력 인자는 보관된 위치가 될 수 있고 세 번째 인자가 보관된 형식과 같습니다. 또한, 컬렉션 종류에 상관없이 사용할 수 있게 만들기 위해 템플릿 형태로 만들기로 합시다. 반환 형식은 세 번째 인자와 같은 값이 보관된 위치를 반환하는 것이기 때문에 앞의 두 인자와 형식이 같겠지요.
구현은 단순히 차례대로 비교하여 같은 값이 보관된 위치를 반환하면 될 것입니다.
#pragma once
template <typename Iter,typename T>
Iter find(Iter beg,Iter end,T t)
{
//구간 내에 보관된 요소중에 t가 있는 위치를 찾아서 반환
for( ; beg != end ; ++beg)
{
if(*beg == t) //현재 위치에 보관된 요소가 t라면
{
break;
}
}
//t가 보관된 곳이 없다면 beg는 end가 같음
return beg;
}
find_if에서는 세 번째 입력 인자로 보관된 위치에 있는 요소를 입력 인자로 받아 호출했을 때 조건에 맞는지를 결과로 반환하는 코드가 오는 것에 차이가 있습니다.
//EHAlgorithm.h |
#pragma once
template <typename Iter,typename T> Iter find(Iter beg,Iter end,T t) { for( ; beg != end ; ++beg) { if(*beg == t) { break; } } return beg; }
template <typename Iter,typename F> Iter find_if(Iter beg,Iter end,F fun) { //보관된 요소 중에 함수 개체를 적용했을 때 처음으로 참인 위치를 반환 for( ; beg != end ; ++beg) { //보관된 요소를 함수 개체에 적용할 때 참이면 if(fun(*beg)) { break; } } return beg; } |
'언어 자료구조 알고리즘 > Escort 자료구조와 STL' 카테고리의 다른 글
[자료구조와 STL] 17. list 만들기 – 더미 노드없는 이중 연결 리스트 (0) | 2016.04.18 |
---|---|
[자료구조와 STL] 16. list 만들기 – 더미 노드있는 이중 연결 리스트 테스트 (0) | 2016.04.18 |
[자료구조와 STL] 15. list 만들기 – 더미 노드있는 이중 연결 리스트 소스 코드 (0) | 2016.04.18 |
[자료구조와 STL] 14. list 만들기 – 더미 노드있는 이중 연결 리스트 (0) | 2016.04.18 |
[자료구조와 STL] 13. list (연결리스트) (0) | 2016.04.18 |
[자료구조와 STL] 11. vector 만들기 소스 코드 (0) | 2016.04.18 |
[자료구조와 STL] 10. vector 만들기 (0) | 2016.04.18 |
[자료구조와 STL] 9.vector를 이용하여 특정 키 순으로 보관하기 예제 코드 (0) | 2016.04.18 |
[자료구조와 STL] 8. 3 vector를 이용하여 특정 키 순으로 보관하기 (0) | 2016.04.18 |
[자료구조와 STL] 7.vector에 자료를 차례대로 보관하기 예제 코드 (0) | 2016.04.18 |