我正在编写图形程序。在此程序中,我有一个方法必须返回位于顶点处的弱分量内部的顶点。我得到:错误“ 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在函数内被视为constbegin上的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/

10-11 22:49
查看更多