【问题标题】:vector iterators incompatible with const vector&向量迭代器与 const vector& 不兼容
【发布时间】:2016-03-23 00:02:23
【问题描述】:

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

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

这有什么问题?

【问题讨论】:

  • j == g.gr[hodn].begin(); 应该是 j = g.gr[hodn].begin();
  • @PeteBecker 当我删除其中一个 = 时,它表示没有运算符“=”与这些操作数匹配。
  • 错误发生在哪一行?另外,您正在泄漏内存(您没有删除used
  • 这并不意味着 == 是正确的行为。 == 比较,= 赋值。如果 = 不比较,则表明有问题。正如瑞安已经指出的那样,您的类型不匹配。谁在释放“用过”的记忆?考虑 std::vector。在 2016 年,一个原始指针应该会让你感到紧张。

标签: c++


【解决方案1】:

由于您将g 视为const graph&amp;,这意味着g.gr 在您的函数中被视为constbegin 上的 const vector&lt;T&gt; 返回 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);
    }
}

【讨论】:

  • 在我编辑后它显示严重代码描述项目文件行抑制状态错误 LNK1168 无法打开 C:.../DU2.exe 以写入 DU2 C:..\DU2\LINK 1
  • @Lemmy 这是一个完全不同的错误,超出了这个问题的范围,需要更多信息来诊断,包括你的平台和编译器
  • @Lemmy 如果您无法弄清楚,您需要使用相关信息提出一个新问题。根据您在这里的情况,我无法开始猜测您的问题,但我也从不使用 Visual Studio
猜你喜欢
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2012-04-17
相关资源
最近更新 更多