2013-06-04 3 views
0

저는 C++을 처음 접했고 이것을 수행하는 방법을 잘 모르겠습니다. 템플릿을 배우려고합니다.일반 함수에서 반복자를 반환하기

이것은 현재 코드입니다. 컨테이너가 (어떤 타입을 받을지 지정되지 않은) 컨테이너를 보내고 정수가 컨테이너에있는 반복자와 함께 전달되면 true를 반환합니다. 나타나지 않으면 False입니다.

#include <iostream> 
#include <vector> 
#include <list> 

template <typename Iter> 
bool function(Iter first, Iter last, const int x) 
{ 
    for (auto it = first; it!=last; ++it) 
    { 
    if (*it == x) 
    { 
     return true; 
    } 
    } 
return false; 
} 

int main() 
{ 
    std::vector<int> vec = {1,2,5,10,11}; 
    std::list<int> lis = {1,1,5,9,55}; 

    auto first = vec.begin(), last = vec.end(); 
    auto first2 = lis.begin(), last2 = lis.end(); 

    std::cout<<function(first, last, 11); 
    std::cout<<function(first, last, 9)<<std::endl; 

    std::cout<<function(first2, last2, 6); 
    std::cout<<function(first2, last2, 55)<<std::endl; 

return 0; 
} 

이 함수를 수정하여 bool을 반환하는 대신 첫 번째 일치 항목에 반복기를 반환합니다. 이 일을 어떻게 하죠? 누군가가 나를 올바른 방향으로 밀어 넣을 수 있다면 정말 도움이 될 것입니다.

+0

대신 [std :: find] (http://en.cppreference.com/w/cpp/algorithm/find)를 사용할 수 있습니까? – billz

+1

먼저 자신을 찌르다가 붙어 있다면 시도한 것을 게시하고 도와 드리겠습니다. – bcr

답변

3

정말 간단하기 때문에 답을주지 않고 올바른 방향으로 밀어 넣는 방법을 모르겠습니다.

template <typename Iter> 
Iter // change 1 
function(Iter first, Iter last, const int x) 
{ 
    for (auto it = first; it!=last; ++it) 
    { 
    if (*it == x) 
    { 
     return it; // change 2 
    } 
    } 
    return last; // change 3 
} 

그런데 이것은 정확히 std::find입니다.

+0

감사합니다! 나는 똑똑한 사람이 아닙니다. 나는 이전에 그것을 가지고 있었지만 std :: cout << function (first, last, 11); 이터레이터를 출력하려고 할 때 오류가 발생합니다. 다시 한번 감사드립니다. –

관련 문제