我刚开始用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。有人能指出我正确的方向吗?
答案 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)
这也不起作用。如上所述,*it
是vector<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>>>