遍历std::vector时容易犯的bug

Hi
Can you find where is the bug?

std::vector<Switch> Switches; 
for(int i=0;i<Switches.size()-1;i++){ 
    /*do stuff here*/ 
}

vector::size()从语义上来讲,必须返回一个非负的值,所以它的返回值
被定义为unsigned.也就是说,如果Switches为空,它将返回0,然后减去1,
得到0xffffffff这样的值。。。
所以,这样的遍历,最好用for_each

std::for_each(Switches.first(),Switches,last(),func);

或者自己这样手动写一个

typedef Vector<Switch>::Iterator switchIter; 
for(switchIter i=switches.first(),i != switches.last(),++i){ 
 /*do stuff here*/ 
}

注意,这里一定要写++i而不是i++.
如果要优化下,就别把switches.last()写在for的()中

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥