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
是迭代器。如果要迭代具有公共索引的两个向量,则直接使用 int
或 size_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]);
}
}
对于我用 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
是迭代器。如果要迭代具有公共索引的两个向量,则直接使用 int
或 size_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]);
}
}