用const_reverse_iterator迭代的問題
(轉(zhuǎn)載請(qǐng)注明來(lái)源于金慶的專欄)
以下代碼:
typedef std::vector<int> IntVec;
IntVec v;
for (IntVec::const_reverse_iterator itr = v.rbegin();
itr != v.rend(); ++itr)
;
itr != v.rend()這一行報(bào)錯(cuò):
error: no match for 'operator!=' in 'itr != std::vector<_Tp, _Alloc>::rend()
[with _Tp = int, _Alloc = std::allocator<int>]()'|
STL迭代的代碼寫過(guò)許多, 突然出現(xiàn)這種錯(cuò)誤有點(diǎn)不敢相信.
仔細(xì)看了一遍沒有拼寫錯(cuò)誤, 又判斷不出是什么錯(cuò), 網(wǎng)上一查才知道原因.
應(yīng)該是v.rend()結(jié)果為reverse_iterator, 所以operator!=無(wú)法比較兩個(gè)不同的類型.
把v改為:
const IntVec v;
或者改比較式為:
itr != ((const IntVec &)v).rend();
都可以解決這個(gè)錯(cuò)誤.
以前總是用reverse_iterator, 沒碰到過(guò)這種錯(cuò)誤. 以后還是仍用reverse_iterator算了.
const_reverse_iterator太長(zhǎng)了點(diǎn), 代碼會(huì)不好看.
又試了試VC2005, 它不會(huì)報(bào)錯(cuò).
參考:
http://topic.csdn.net/u/20070121/17/fd98d4b3-d3df-4061-9fbd-6b62b6946b7f.html?1131336059
(轉(zhuǎn)載請(qǐng)注明來(lái)源于金慶的專欄)
以下代碼:
typedef std::vector<int> IntVec;
IntVec v;
for (IntVec::const_reverse_iterator itr = v.rbegin();
itr != v.rend(); ++itr)
;
itr != v.rend()這一行報(bào)錯(cuò):
error: no match for 'operator!=' in 'itr != std::vector<_Tp, _Alloc>::rend()
[with _Tp = int, _Alloc = std::allocator<int>]()'|
STL迭代的代碼寫過(guò)許多, 突然出現(xiàn)這種錯(cuò)誤有點(diǎn)不敢相信.
仔細(xì)看了一遍沒有拼寫錯(cuò)誤, 又判斷不出是什么錯(cuò), 網(wǎng)上一查才知道原因.
應(yīng)該是v.rend()結(jié)果為reverse_iterator, 所以operator!=無(wú)法比較兩個(gè)不同的類型.
把v改為:
const IntVec v;
或者改比較式為:
itr != ((const IntVec &)v).rend();
都可以解決這個(gè)錯(cuò)誤.
以前總是用reverse_iterator, 沒碰到過(guò)這種錯(cuò)誤. 以后還是仍用reverse_iterator算了.
const_reverse_iterator太長(zhǎng)了點(diǎn), 代碼會(huì)不好看.
又試了試VC2005, 它不會(huì)報(bào)錯(cuò).
參考:
http://topic.csdn.net/u/20070121/17/fd98d4b3-d3df-4061-9fbd-6b62b6946b7f.html?1131336059