C++ 为什么这个for循环没有';while循环做的不一样吗?
我正在尝试实现鸡尾酒排序,在主循环中,我尝试使用for循环而不是while循环,但它没有给出相同的结果。 以下是while循环的代码:C++ 为什么这个for循环没有';while循环做的不一样吗?,c++,for-loop,while-loop,C++,For Loop,While Loop,我正在尝试实现鸡尾酒排序,在主循环中,我尝试使用for循环而不是while循环,但它没有给出相同的结果。 以下是while循环的代码: 模板 无效鸡尾酒(标准:向量和向量) { 标准:尺寸=1; std::size\u t end=vec.size()-1; 布尔变化=真; 而((beg
模板
无效鸡尾酒(标准:向量和向量)
{
标准:尺寸=1;
std::size\u t end=vec.size()-1;
布尔变化=真;
而((beg
输出:
Before: 3 2 0 9 5 7 8 1 4 6
After: 0 1 2 3 4 5 6 7 8 9
Before: 3 2 0 9 5 7 8 1 4 6
After: 0 2 1 3 5 7 8 4 6 9
下面是for循环:
模板
无效鸡尾酒(标准:向量和向量)
{
//标准:尺寸=1;
//std::size\u t end=vec.size()-1;
布尔变化=真;
//而((beg
输出:
Before: 3 2 0 9 5 7 8 1 4 6
After: 0 1 2 3 4 5 6 7 8 9
Before: 3 2 0 9 5 7 8 1 4 6
After: 0 2 1 3 5 7 8 4 6 9
你知道我为什么得到不同的输出吗?如果您想查看主文件或其他内容,可以找到“我的代码”。在
for
循环中,在计算条件(第2部分)之前执行“增量”(第3部分)。就你而言
for(std::size_t beg = 1, end = vec.size() - 1; (beg < end) && (change); change = false)
for(std::size\u t beg=1,end=vec.size()-1;(beg
您不是在递增变量,而是设置
change=false代码>。但是,这仍然是在评估条件之前执行的。因此,条件总是错误的。相反,在while
循环中,设置change=false在对条件进行评估后,在循环内编码。这意味着您的两个循环不相等。在For循环中,从For()语句内部删除(change=false)。让的语句
for(std::size_t beg = 1, end = vec.size() - 1; (beg < end) && (change);)
{
// Write here
change= false;
......
}
(std::size\u t beg=1,end=vec.size()-1;(beg
这会奏效的
说明:在循环代码中,您的更改在第一步设置为false。
但是在for循环中,change=false语句在循环结束时设置为false。作为for循环的第三个参数,作为循环的最后一条语句执行
举个例子:
用于(i=0;i
i最后是递增的,而不是最初。这就是你的解决方案的问题所在
for (size_t i = 0; i < 10; i++)
body();
这相当于
size_t i = 0;
while (i < 10) {
body();
}
bool change = true;
while (change) {
body();
change = false;
}
在第一次通过此循环之后,在循环开始时的条件测试期间,更改将始终为false
for ( initial ; condition ; iterate )
^-------------------v
考虑在两个循环中change
设置为false的位置。一个在开头,一个在结尾。哇,好吧,我现在看到了,非常感谢。我已经看了一个小时了。。。那么我将使用while循环。