我正在编写图形程序。在此程序中,我有一个方法必须返回位于顶点处的弱分量内部的顶点。我得到:错误“ vector 迭代器不兼容”
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;
}
它出什么问题了?
最佳答案
由于您将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);
}
}
关于c++ - vector 迭代器与const vector&不兼容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36167480/