When I do exercises, I always use for loops: for(int i = 0; i < n; i++) But sometimes I got wrong with them, I have tried in many ways to fix, but it ran only when I turn the i++ in for loop to ++i. I wonder when can we use i++ and when ++i?
- 
                    1Does this answer your question? [Post-increment and Pre-increment concept?](https://stackoverflow.com/questions/4445706/post-increment-and-pre-increment-concept) – wychmaster Apr 21 '20 at 11:14
3 Answers
i++ and ++i are statements and expressions at the same time.
They both increment the i variable, obviously, and both return the value of i as their result, but i++ returns the value of i before it's incremented whereas ++i returns the value of i after it's incremented.
If you don't use it as an expression but just as a statement, either form works equally well. If you do use the result, it depends what you want to achieve, e.g. in a[i++] = 1 you write to a and then increment the index.
 
    
    - 28,327
- 8
- 59
- 66
- 
                    1Nitpick: *every* expression can be used as a statement, from the production "[*statement*](https://timsong-cpp.github.io/cppwp/n4659/stmt.stmt): *attribute-specifier-seq* opt [*expression-statement*](https://timsong-cpp.github.io/cppwp/n4659/stmt.expr#nt:expression-statement)" – Caleth Apr 21 '20 at 11:19
++i is called pre increment while i++ is called postincrement.
++i increments the value of i and then returns i,
i++ returns the value of i and then increments.
Both of them increase the variable i by one. It's like saying i = i + 1. The difference is subtle. If you're using it in a loop like this, there's no difference:
for (int i = 0; i < 10; i++) {
}
for (int i = 0; i < 10; ++i) {
}
 
    
    - 1,574
- 1
- 10
- 17
Two typical implementations where T represents any type:
++i prefix increment
T& operator++() {   // returns by reference
    // increment *this by 1 here
    return *this;
}
i++ postfix increment
T operator++(int) { // returns by value
    T copy(*this);  // make a copy of the current state
    ++(*this);      // increment *this by 1 here, using the pre-increment operator
    return copy;    // return the copy
}
 
    
    - 93,841
- 5
- 60
- 108
 
    