C++基礎::關於區間端點的問題

Inside_Zhang發表於2015-11-10

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還要進行自加

相關文章