简体   繁体   中英

I need better understanding on for loops

can someone explain me how this for loop works ( Line 9 in code below ), and also if you can show me a simple example with it can be very helpfull, thank you anyways!

1 #include <iostream>
2 #include <cstdlib>
3 
4 using namespace std;

5 int main(){
6     int n, a , b , ma=0,mb=1000000001;
7     cin >> n ;
8     cin >> a;
9     for( n--; n ; --n ){
10         cin >> b;
11         if(abs(a-b) < abs(ma-mb))
12             ma=a , mb=b;
13         else
14             if(abs(a-b) == abs(ma-mb) && ma+mb > a+b)
15                 ma=a , mb=b;
16         a = b;
17     }
18     cout << ma << " " << mb;
19     return 0;
20 }

A for loop is simply another way to write a while loop. So this:

for( n--; n ; --n ){
    ...
}

is the same as this:

n--;
while(n) {
    ...
    --n;
}

Which, in this specific case, is easier to read. First it decrements n , then does the loop, decrementing n again at the end of each loop, until that decrement causes n to evaluate to false by becoming 0 .

This code smells a lot. If you give to n the value 10,it gives

9 (first time into loop, exectues n-- ) every other iteration it executes --n till when n!=0 (which is the condition n

A for loop works the following way:

It runs for a certain number of times. We signify this with a condition. It has a start and an increment:

for (start ; condition ; increment )
{
// loop body
}

For loops and all loops are very useful when you want to perform repetitive tasks.

Lets say that you want to make a game and this game will have 3 rounds. Each one of those rounds can be implemented as an iteration of a for loop. It will look like this:

for(int round = 0; round < 3; ++round) {
// game round logic
}

In the above loop we start at 0. Once we reach 3, we would have already executed the for-loop 3 times. After each iteration of the for loop ++round gets executed, this increments the variable round by 1. We can increment it by a different value by doing: round+=2 or round*=2 etc.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM