Compiler Error: no match for 'operator[]' C++

Compiler Error: no match for 'operator[]' C++

对于我用 C++ 编写的简单深度优先搜索算法,编译器给出了以下错误消息:

error: no match for 'operator[]' (operand types are 'std::vector' and 'std::vectorstd::vector<int >::iterator {aka __gnu_cxx::__normal_iteratorstd::vector<int*, std::vectorstd::vector<int > >}') if (!visited[i])

这是代码块:

#include<bits/stdc++.h>
...
vector<bool> visited;
vector<vector<int>> adj_matrix;
...
void dfs(int n) {
  //Possible problem
  if (!visited[n])
    visited[n] = true;
  for (vector<int> row : adj_matrix) {
    for (vector<vector<int>>::iterator i = adj_matrix.begin();
         i != adj_matrix.end(); ++i) {
      if (!visited[i])
        dfs(row[i]);
    }
  }
}

我也试过使用指针作为数组索引,像这样:

    if (!visited[*n])
    visited[*n] = true;

但它说的完全一样。

问题出在visited[i],其中i是迭代器。如果要迭代具有公共索引的两个向量,则直接使用 intsize_t,因为迭代器属于单个容器(在这种情况下,adj_matrix,而不是 visited) 并且表现得像指针,而不像索引。

所以用这个替换你的最后一段代码:

for (vector<int> row : adj_matrix) {
    for (int i = 0; i != adj_matrix.size(); ++i) {
      if (!visited[i])
        dfs(row[i]);
    }
}