我正在尝试使用STL在c ++中编写BFS代码。这是我遇到问题的代码部分
std::list<int> li=*i;
for (std::list<int>::iterator iter=li.begin(); iter!=li.end();++iter)
{
if (arr[iter]==0)
{
myQ.push(iter);
arr[iter]=1;
这里arr是存储我是否看过节点的数组。我收到了错误
&#34; arr[iter]
答案 0 :(得分:0)
iter是一个迭代器,所以是一种指针,而不是整数。这是whiy []不起作用,因为它需要一个整数。
尝试使用arr[*iter]
,然后您的广度优先搜索将成功避免周期。
请注意,如果myQ也应该包含节点,那么你的推送(iter)就有同样的潜在问题。
通过将arr定义为集合而不是数组/向量,可以进一步改进设计。 您的情况如下:
if (arr.count(*iter) == 0) {
myQ.push_back(*iter);
arr.insert(*iter); // works for int, but also other data types
}
答案 1 :(得分:0)
Iam通过在整数数组中假设arr来回答。 任何数组elemet只能通过其整数索引访问,但不能访问整数索引的地址。 这里iter是可以存储整数地址的指针。
所以你必须使用'*'来检索存储在地址中的值以获得整数值。
所以将array [iter]更改为array [* iter] ..
希望这能解决您的问题。
答案 2 :(得分:0)
这里iter是一个迭代器,它是指向列表的指针,所以为了访问它的值,你必须编写* iter(它指向的访问值)而不是iter(它是引用)。
试试这个
Function ColorMax(Color As Integer) As Single
Dim x As Integer
Dim y As Integer
ColorMax = 0
With Application.Caller.Parent
For x = 1 To 1000
For y = 1 To 1000
If Cells(x, y).Interior.ColorIndex = Color And .Cells(x, y).Value > ColorMax Then
ColorMax = .Cells(x, y).Value
End If
Next
Next
End With
End Function