언어 자료구조 알고리즘/Escort 자료구조와 STL

[자료구조와 STL] 12. find , find_if 만들어보기

언제나휴일 2016. 4. 18. 10:27
반응형

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에서는 세 번째 입력 인자로 보관된 위치에 있는 요소를 입력 인자로 받아 호출했을 때 조건에 맞는지를 결과로 반환하는 코드가 오는 것에 차이가 있습니다


AboutVector.zip


 

//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;

}

 

반응형