迭代c ++中的向量向量

时间:2016-09-04 17:01:35

标签: c++ vector stl

我刚开始用C ++编写代码,所以我是STL的新手。 在这里,我试图迭代存储为矢量矢量的图形。

#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 个答案:

答案 0 :(得分:2)

*它指向vector not int,这就是为什么你会收到错误

以下代码可能适合您

    #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()
  {

  }

用于访问使用

的向量的第一个元素
   (*(*it).begin()) in place of (*it)

如果你正在学习图形,那么使用矢量数组。有关详细信息,请通过以下网址进行操作 C++ Depth First Search (DFS) Implementation

答案 1 :(得分:1)

 cout << (*it) << endl;

在此,您将it声明为:

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

因此,*it是:

 vector<int>

因此,您尝试使用operator<<将其发送到std::cout。显然,这不起作用。这相当于:

 vector<int> v;

 cout << v;

没有为operator<<cout定义的vector<int>重载。如您所知,为了打印矢量的内容,您必须迭代其各个值,并打印其各个值。

所以,无论你的意图是什么,当你写道:

cout << (*it) << endl;

您需要做其他事情,请注意*it这里是一整个vector<int>。也许你的意图是迭代向量并在向量中打印每个int,但你以后就已经这样做了。

类似地:

 if ((*it) == x)

这也不起作用。如上所述,*itvector<int>,无法与普通int进行比较。

目前还不清楚你的意图是什么。 “存储为矢量或矢量的图形”太模糊了。

答案 2 :(得分:0)

以下代码使用选项std = c ++ 11进行编译。但1 2中缺少2 1。如果x类型为vector<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>>>