#define rep(i, l, r) for ((i) = (l); (i) < (r); (i)++)
Things like that are pretty common. Why do so many of you need to do things like this? What is wrong with a good old for-loop? Is it that slow to write one explicitly?
| # | User | Rating |
|---|---|---|
| 1 | jiangly | 3810 |
| 2 | Benq | 3676 |
| 3 | Kevin114514 | 3655 |
| 4 | maroonrk | 3463 |
| 5 | strapple | 3447 |
| 6 | Um_nik | 3387 |
| 7 | heuristica | 3322 |
| 8 | turmax | 3317 |
| 9 | tourist | 3307 |
| 10 | jiangbowen | 3291 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 156 |
| 2 | nik_exists | 150 |
| 2 | maspy | 150 |
| 4 | Um_nik | 143 |
| 5 | Errichto | 139 |
| 6 | adamant | 137 |
| 7 | AmShZ | 135 |
| 8 | maroonrk | 133 |
| 9 | BledDest | 132 |
| 10 | qwexd | 129 |
#define rep(i, l, r) for ((i) = (l); (i) < (r); (i)++)
Things like that are pretty common. Why do so many of you need to do things like this? What is wrong with a good old for-loop? Is it that slow to write one explicitly?
| Name |
|---|



It's shorter.
So?
Its just personal opinion I think.
Some people are just comfortable using
#defineforfor(;;). Others are not. There isn't much to it.consider the two cases:
1) rep(i, l, r) — 12 characters
2) for (int i = l; i < r; i++) — 27 characters
The difference is a whopping 15 characters! The average typing speed is ~44 WPM or ~220 characters per minute, that's ~4s for 15 characters! Sure, it might not seem like a big number but over time it adds up. After you've written over 1000 for loops (not an unreasonable number, corresponds to ~100 problem solution) the saved time has accumulated to 4000s or around one hour! To get your imagination rolling, here is a list of 101 fantastic things you could've done in that hour: https://www.care.com/c/stories/5309/101-things-to-do-with-an-extra-hour/
That's why I do "for<TAB>l<TAB>r<TAB>" — that's 8 keystrokes only. And I have the braces as a bonus!
To avoid this bug:
i did this many times.
Actually all C-style for-loops are syntactically broken.
Less important reason (shorter code) was already mentioned few times, so I won't talk about it.
More important reason is that in 90% of usages there is a lot of redundancy within them which leads to being highly error prone. In
you have to write "i" three times! In my macro version this is equivalent to RE(i,n) where i occurs only once. This way this is much less probable that I will make a bug when one of these three occurances is j or exactly what I_love_Hoang_Yen suggested. This is most vulnerable in cases where we want to change name of our variable and replace for example two out of three occurances. For example when I do n phases of my algorithm and use "i" to denote phase number and in every phase I iterate over all vertices of my graph which I also call "i". Then compiler tells me something about shadowing or maybe I simply use number of phase inside that inner loop and I am forced to change inner i to something else and I chose v. And I end up with