这个返回元素位置的基于循环的函数有什么问题?
What is wrong with this loop-based function that returns the position of an element?
此函数从位置"start"在给定向量中查找整数"键"。如果找到键,它会返回键的位置。但是如果它没有找到键,它应该返回 -1。
但是,它只返回 -1 作为输出。如果删除 else 语句,该函数工作正常,但显然我需要它。
那么这个函数有什么问题呢?请用简单的术语解释一下,我是C++新手。谢谢你的帮助。
int Sequential_Search(const vector<int>&v, int key, int start){
int result = 0;
int i;
for(i = start; i < v.size(); i++){
if(v[i] == key){
result = i;
}
else{
result = -1;
}
}
return result;
}
这很容易理解:
for(i = start; i < v.size(); i++){
if(v[i] == key){
result = i;
}
else{
result = -1;
}
}
假设您的向量包含 [1, 2, 3, 4],并且您从索引 0 开始搜索 2:以下是您的代码正在执行的操作:
i = 0: (v[i] : 1) == 2 -> false: result = -1
i = 1: (v[i] : 2) == 2 -> true: result = 1
i = 2: (v[i] : 3) == 2 -> false: result = -1
i = 3: (v[i] : 4) == 2 -> false: result = -1
当你找到你的值时,你仍然会继续读取其他值,而你应该停止。
- 要么使用
break
,要么在v[i] == key
条件下直接返回(return i
(; - 要么通过检查结果在 for 条件 (
result == -1 && i < v.size()
(
每条评论:break
和return
的情况(最后一个并不难(:
int Sequential_Search(const vector<int>&v, int key, int start){
int result = -1; // important for 'break'
for(int i = start; i < v.size(); i++){
if(v[i] == key){
result = i; break;
}
}
return result;
}
int Sequential_Search(const vector<int>&v, int key, int start){
for(int i = start; i < v.size(); i++){
if(v[i] == key){
return i;
}
}
return -1;
}
当循环找到键时,它会设置result = i
- 但它不会停止循环。在下一次迭代中,v[i]
可能不等于key
,循环result
重置为-1
。该函数返回-1
除非key
恰好与最后一个元素匹配。
else 语句失败的原因是,在许多情况下,键不会是向量中的最后一项。
如果键为 3,整数的向量为 <1,3,4>,则 for 循环将遍历总共 3 次。在第一次迭代中,它将进入 else 语句,因为我们没有在第 0 个索引处找到键。结果为 -1。在第二次迭代中,我们找到了关键!将结果设置为 i = 1。第三次迭代将再次进入 else 语句,并将结果设置回 -1。
要解决此问题,您可以使用"break"在找到结果后立即离开 for 循环。将结果设置为 I,然后用休息符跟随它;这将确保如果找到结果,您将不会再次进入 else 语句并将其重置为 -1。
相关文章:
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 循环中的随机函数
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 未在函数C++中执行的循环
- 无穷大而循环时具有递归函数
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- 这个返回元素位置的基于循环的函数有什么问题?
- 接受线程 C++ 套接字中的函数循环
- 我需要做一个空函数循环回来,而不会让它崩溃或跳过
- 无限构造函数循环
- C 查找无SQRT函数循环故障的平方根
- 如何让我的checkLength函数循环,直到用户输入超过5个字符的密码
- 停止一个函数循环,然后恢复它们
- 使用链表函数循环
- C++模板元编程成员函数循环展开
- C++函数循环和if语句不起作用
- 在c++中使用递归函数循环遍历deque
- 互惠友元成员函数=循环包含声明
- c++验证函数循环在第一次迭代后返回相同的结果