Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个for循环没有';while循环做的不一样吗?_C++_For Loop_While Loop - Fatal编程技术网

C++ 为什么这个for循环没有';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

我正在尝试实现鸡尾酒排序,在主循环中,我尝试使用for循环而不是while循环,但它没有给出相同的结果。 以下是while循环的代码:

模板
无效鸡尾酒(标准:向量和向量)
{
标准:尺寸=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循环。