我正在为图表编写程序。在这个程序中,我有一个方法,它必须返回起源于顶点的弱组件内的顶点。我得到:错误“矢量迭代器不兼容”
struct graph {
std::vector <std::vector<int>> gr;
};
std::vector<int> weak_component(const graph& g, int vertex) {
std::vector<int> ret;
stack<int> s;
s.push(vertex);
vector<int>::iterator j;
bool* used = new bool[g.gr.size()];
while (!s.empty()) {
int hodn=s.top();
s.pop();
used[hodn] = true;
for (j == g.gr[hodn].begin(); j != g.gr[hodn].end(); j++) {
if (!used[*j]) {
s.push(*j);
ret.push_back(*j);
}
}
}
return ret;
}
它出了什么问题?
答案 0 :(得分:3)
由于您将g
作为const graph&
,这意味着g.gr
在您的函数中被视为const
。 begin
上的const vector<T>
会返回const_iterator
。 (您还使用==
代替=
进行分配)
for (std::vector<int>::const_iterator j = g.gr[hodn].begin(); ...)
但是使用C ++ 11或更新版本,你也可以使用auto
来避免这个
for (auto j = g.gr[hodn].begin(); ...)
或基于范围的:
for (auto&& e : g.gr) {
if (!used[e]) {
s.push(e);
ret.push_back(e);
}
}