2016-09-04 9 views
0

私はちょうどC++でコーディングを始めました。だから私はSTLを初めて使っています。 ここでは、ベクトルのベクトルとして格納されたグラフを反復しようとしています。ベクトルのベクトルをC++で反復する

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

using namespace std; 

int reach(vector<vector<int> > &adj, int x, int y) { 
    vector<vector<int> >::iterator it; 
    vector<int>::iterator i; 

    for (it = adj.begin(); it != adj.end(); it++) 
    { 
     cout << (*it) << endl; 
     if ((*it) == x) 
      for (i = (*it).begin(); i != (*it).end(); i++) 
      { 
       cout << (*i) << endl; 
       if ((*i) == y) 
        return 1; 

      } 
    } 
    return 0; 
} 

int main() 
{ 

} 

私はエラーstd::vector<int>を取得していますがconstのGNU cxxから導出されていません。誰かが私を正しい方向に向けることができますか?ここで

+3

'* it'は' vector 'であり、 'int'は1つではありません。 'cout'に送るか、それを整数' x'と比較するのはどういう意味ですか? –

+0

おっと!私はそこに私の間違いを見る。くそー。ありがとう! – RAHUL

答えて

1
cout << (*it) << endl; 

、あなたがようitを宣言:

vector<vector<int> >::iterator it; 

したがって、*itは次のとおりです。

vector<int> 

だから、std::coutに送信するoperator<<を使用しようとしています。これは、明らかに、動作しません。これは同等です:

vector<int> v; 

cout << v; 

coutが何であるかのために定義されています何のoperator<<過負荷、およびvector<int>はありません。ご存じのように、ベクトルの内容を印刷するには、個々の値を繰り返し処理し、個々の値を出力する必要があります。

cout << (*it) << endl; 

あなたが何かを行う必要があります、*itはここに全体vector<int>であることを念頭に置いて:あなたが書いたとき

だから、何でもあなたの意図がありました。おそらくあなたの目的は、ベクトル上で反復して、ベクトル内の各intを印刷することですが、あなたはすでにそれをやっています。同様に

は:

if ((*it) == x) 

これはどちらか動作しません。説明したように、*itvector<int>であり、これは平文intとは比較できません。

ここにあなたの意図が明確ではありません。 「1つまたは複数のベクトルとして保存されたグラフ」はあまりにも曖昧です。

0

次のコードは、オプションstd = C++ 11でコンパイルします。しかしxvector<vector<int>>にありません。 adjのタイプがvector<pair<int, vector<int>>>の場合、それはよりよく一致します。

次のコードはvector<vector<int>>のためにコンパイルされますが、xは使用されません。

using std::vector; 
using std::pair; 
using std::cout; 
using std::endl; 

int reach(vector<vector<int> > &adj, int x, int y) { 
    vector<vector<int> >::iterator it; 
    vector<int>::iterator i; 
    for(it=adj.begin();it!=adj.end();it++) 
     { 
      // cout << (*it) << endl; 
      for (const auto& nexts: *it) 
       cout << nexts << ' '; 
      cout << endl; 

      for(i=(*it).begin();i!=(*it).end();i++) 
      { 
       cout << (*i) << endl; 
       if((*i)==y) 
        return 1; 
       } 
      } 
    return 0; 
} 

このコードは<vector<pair<int, vector<int>>>でコンパイルし、xを使用しています。それはあなたが使用するベクトルの最初の要素にアクセスするためにあなた

#include <vector> 
    #include <iostream> 

    using namespace std; 

    int reach(vector<vector<int> > &adj, int x, int y) { 
    vector<vector<int> >::iterator it; 
    vector<int>::iterator i; 

    for (it = adj.begin(); it != adj.end(); it++) 
    { 
    cout << (*(*it).begin()) << endl; 
    if (((*(*it).begin())) == x) 
     for (i = (*it).begin(); i != (*it).end(); i++) 
     { 
      cout << (*i) << endl; 
      if ((*i) == y) 
       return 1; 

     } 
    } 
    return 0; 
    } 

    int main() 
    { 

    } 

のために働くことのコードを次のエラーに

を得ている理由ですint型ではないベクトルを指し*

using std::vector; 
using std::pair; 
using std::cout; 
using std::endl; 

int reach(vector<pair<int, vector<int> > > &adj, int x, int y) { 
    vector<pair<int, vector<int> > >::iterator it; 
    vector<int>::iterator i; 
    for(it=adj.begin();it!=adj.end();it++) 
     { 
      cout << it->first << endl; 

      if (it->first == x) 
       for(i=it->second.begin();i!=it->second.end();i++) 
       { 
        cout << (*i) << endl; 
        if((*i)==y) 
         return 1; 

        } 
       } 
    return 0; 
} 
関連する問題