编译器错误:与'operator[]' C++不匹配



编译器为我用C++编写的简单深度优先搜索算法显示以下错误消息:

错误:"operator[]"不匹配(操作数类型为"std::vector"one_answers"std:::vectorstd::vector<int>:迭代器{aka __gnucxx::__normal_iteratorstd::vector<int*,std::vectorstd:如果(!访问[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]);
}
}

最新更新