
please wait
for(unsigned int i = 0; i < vector.size(); i++)
for(unsigned int i = vector.size(); i--;)
for(unsigned int&& i = vector.size(); i--;)
for(unsigned int i = vector.size();; i--)
for(unsigned int&& i = vector.size();; i--)
Script Coder wrote: |
---|
do you not mean: for(unsigned int i = vector.size();; i--) and for(unsigned int&& i = vector.size();; i--)
|
did you know there's also a bit faster way to iterate over the elements |
Check out this piece of code: for(unsigned int&& i = vector.size(); i--;) But now the ultimate question is, does it work properly? |
|
|
#include <vector> std::vector<int> v(100); volatile int sink; int main() { for(unsigned int i = v.size(); i--; ) { sink += v[i]; } } // GCC loop .L8: movl sink(%rip), %edx movl %eax, %ecx subl $1, %eax addl (%rsi,%rcx,4), %edx cmpl $-1, %eax movl %edx, sink(%rip) jne .L8 // Clang loop .LBB1_2: movl (%rcx), %edx addl %edx, sink(%rip) addq $-4, %rcx incl %eax jne .LBB1_2 |
|
|
#include <vector> std::vector<int> v(100); volatile int sink; int main() { for(auto i = v.begin(); i!=v.end(); ++i) { sink += *i; } } // GCC loop .L8: movl sink(%rip), %edx addl (%rax), %edx addq $4, %rax cmpq %rax, %rcx movl %edx, sink(%rip) jne .L8 // Clang loop .LBB1_1: movl (%rcx), %edx addl %edx, sink(%rip) addq $4, %rcx cmpq %rcx, %rax jne .LBB1_1 |