template <class In, class V>
In my_find(In begin, In end, V val)
{
/*
while (begin != end)
{
if ((*begin) == val)
return begin;
++begin;
}
*/
while (begin != end || *begin != val)
++begin;
return begin;
}
我一直在尝试执行find,但是没有成功。我无法弄清楚为什么注释掉的代码行得通,而另一个却不断收到一条消息,说“无法取消引用超出范围向量迭代器”。
答案 0 :(得分:0)
您正在使用||
操作,这意味着要对while()
中的条件求值,应该对两个表达式都求值。
因此,即使begin != end
为false
,它仍然会评估下一个表达式为*begin != val
。当begin等于结束迭代器时,这意味着您正在尝试取消引用结束迭代器,这是不安全的,并且可能导致不确定的行为。
答案 1 :(得分:0)
第二个while循环是逻辑错误。这基本上意味着如果任一条件都满足,则应执行循环。因此,它会一直从*开始递增,直到到达超出范围的点为止。 尝试更改| |与&&。这意味着要满足这两个条件,循环才能执行,这正是您注释的代码所要做的。