矢量迭代器与const vector&

时间:2016-03-23 00:02:23

标签: c++

我正在为图表编写程序。在这个程序中,我有一个方法,它必须返回起源于顶点的弱组件内的顶点。我得到:错误“矢量迭代器不兼容”

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;
}

它出了什么问题?

1 个答案:

答案 0 :(得分:3)

由于您将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);
    }
}