2011-12-02 17 views
0

2つのベクトルに共通の要素があるかどうかをチェックしたいと思います。この構文の何が問題になっていますか?C++が関数テンプレートにベクトルを渡す

あなたが標準コンテナ(に類似)としてVectorListを実装している、私は( find_first_ofを参照)を書き込む検討したいと仮定すると、
// 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

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でやるべきではない= I、またはそれはいくつかの共通の価値観を見つけることができません、すなわち

1 2 3 
2 3 4 

=私、あなたが見つけることは決してないだろうので、共有値「2」。したがって、毎回ベクトルの先頭からループの2番目の文字をにする必要があります。

関連する問題