布尔值在 for 循环中没有变化
Boolean value not changing in for loop
我有一个 for 循环,可以在向量中搜索对象"Book"。 如果 refBook 在向量中,它应该返回 true。 如果不是,则为假。
int has = 0;
for (int i = 0; i < mBooks.size()-1; i++) {
if (mBooks.at(i) == refBook) {
has = 1;
cout << "Has book " << has << endl;
};
};
return has;
它正确地通过循环,如果 Book 在向量中,它将打印 cout 语句。 但是,它仍然返回 0。 如果 has = 1;相反,它将返回 1。 如果 Book 在向量中,它永远不会更改其值。
为什么会这样?
我只想抛出这正是std::find
存在的目的:
bool has = (std::find(mBooks.begin(), mBooks.end(), refBook) != mBooks.end());
在编写循环时很容易犯错误(例如停止一次迭代短) - 这就是为什么有时首先尝试避免编写它们是很好的。
首先,您不需要在"if"块或"for"块的右括号后使用右分号。接下来,我怀疑问题可能是:
(int i = 0; i < mBooks.size()-1; i++)
看到负 1 了吗?这意味着您不会检查向量中的最后一项。如果这本书是矢量中的最后一项,你就不会拿起它!这张图很好地总结了我认为你遇到的问题。
试试这个:
int has = 0;
for (int i = 0; i < mBooks.size(); i++)
{
if (mBooks.at(i) == refBook)
{
has = 1;
cout << "Has book " << has << endl;
}
}
return has;
这里有一些提示给你。C++有一个内置的布尔类型bool,你可以用它来代替整数来表示"true"和"false"(这是关键字!向量也可以像本机数组一样被索引,所以你可以用 [] 代替 'at'。因此,下面是一个稍微C++的代码版本:
bool has = false;
for (int i = 0; i < mBooks.size(); i++)
{
if (mBooks[i] == refBook)
{
has = true;
cout << "Has book " << has << endl;
}
}
return has;
最后一个建议,更高级一些,是使用新的C++11"范围"语法,该语法可用于向量和列表等。我还将介绍"auto"和"break"关键字,我建议您熟悉这些关键字:
bool has = false;
for (auto& book : mBooks)
{
if (book == refBook)
{
has = true;
cout << "Has book " << has << endl;
break;
}
}
return has;
最后,值得一看的是 std::find 函数(编辑:我看到其他人提出了这个),它是为这种情况提供的。
你要找的代码(以绝地武士的方式挥手)。
由于内存损坏,如果打印语句,该函数(如现在)将返回1
。
所以你的问题可能出在别处。
我会给出一点建议:如果你只是想看看这本书是否在那里,那么一旦你找到它,就没有必要继续寻找。你应该检查整个向量,在你跳过最后一项的那一刻。你最好这样:
int hasBook (TBook &refBook) {
for (int i = 0; i < mBooks.size(); i++) {
if (mBooks.at(i) == refBook) {
cout << "Has book " << refBook << endl;
return 1;
}
}
return 0;
}
- C++我的数学有什么问题,为什么我的代码不能正确循环
- Python中的for循环与C++有何不同
- C++有多少类型的循环
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 如何避免LED在循环状态变化中闪烁?
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 这个返回元素位置的基于循环的函数有什么问题?
- 有没有办法使用输入的维度初始化 2d 数组中的所有项目而不循环C++?
- 如何在 c++ 中循环中使用频率变化的声音?
- 有没有办法在C++中循环访问对象的不同数据成员
- string1 == string2 和你自己的 for 循环比较有什么区别?
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 有没有办法在循环中的条件至少满足一次时运行语句?
- 试图避免在 for 循环中出现 if-else 语句,但代码似乎有一些错误
- 有没有办法通过在C++中键入内容来停止正在进行的循环?
- 我在 c ++ 中有一个循环错误
- 如何安全地关闭一个有无限循环的THREAD
- C++是否有解决循环依赖的方法
- 有向循环图中两个节点之间的路径数
- c++ STL标准是否有变化?