2011-12-02 2 views
0

두 벡터에 공통적 인 요소가 있는지 확인하고 싶습니다. 이 구문이 잘못된 이유는 무엇입니까?C++이 함수 템플릿에 벡터를 전달합니다.

// Check whether the current list and the input l2 share any nodes or not 
bool shared(const VectorList<NODETYPE> &l2); 

template< typename NODETYPE > //SHARED 
bool VectorList< NODETYPE>::shared(const VectorList<NODETYPE> &l2) 
{ 

    for(int i = 0; i < (int)vList.size(); i++) 
     { 
     for (int j = i; j < (int)l2.size() ; j++) 
      { 
        if (vList[i] == l2[j]) 
        { 
         return(1); 
        } 
      } 
     } 

    return(0); 

} 
+3

코드에 문제가 있다고 생각하는 이유를 게시하고 싶을 수 있습니다. 컴파일러 오류 일 경우 컴파일러 이름과 버전도 도움이 될 수 있습니다. – sbi

+0

항상 컴파일러 오류도 게시하십시오. 구문을 확인하기 위해이 작업을 수행했기 때문에 사람들은 스스로 구문을 확인하지 않았습니다. – Beginner

+0

'std :: vector'는 표준 템플릿 컨테이너를 위해 고안된 STL 알고리즘뿐만 아니라 그것을 사용해야하는 것은 아닙니다. – AJG85

답변

5

당신이로 VectorList을 구현 한 가정하면 표준 컨테이너, 나는 (find_first_of 참조)를 작성하는 생각 하는데요 (유사) :

template<typename T> 
bool VectorList<T>::shared(const VectorList<T> &l2) const // <-- NOTE added const 
{ 
    return end() != std::find_first_of(
     begin(), end(), 
     l2.begin(), l2.end()); 
} 

참고 타입의 (최악의 경우) 런타임 복잡성은 여전히 ​​것 (또는 O(n*m))

+0

다시! 그리고 다시 +1! – Beginner

2

벡터가 주문 되었습니까? 그렇지 않으면, 당신은 J를하지 말아야하기 때문에 당신이 J와 루프에 대한 두 번째 를 시작하면 = 내가, 아니면, 즉

1 2 3 
2 3 4 

을 일부 공유 가치를 찾을 수 없습니다 = 난, 당신은 찾을 수 없을거야 공유 값 "2". 따라서 매번 벡터 시작 부분에서 루프를 시작해야합니다. (j = 0)

관련 문제