在STL
的环境中,我们知道区间都是左闭右开的区间。这一点很重要,然而仅仅知道这些还是不够的。
当自加运算和循环结合,要特别小心:
比如返回容器中某一元素所在的索引,
vector<string> values{"hello", "world", "inside", "zhang"};
vector<string>::const_iterator pos = values.begin();
while (*pos != "inside")
++pos;
size_t idx = pos - values.begin(); // 这时idx == 2
可是如果想试图更装逼的使用自加机制,你也许会这样写:
while (*pos++ != "inside");
size_t idx = pos - values.begin();
// 这时idx == 3
// 稍加思考,比较容易理解,无论是`++i`还是`i++`
// 都是两个动作,
// 比如本例,当*pos == "inside"时,pos还要进行自加