星期一, 2月 26, 2007

沒有NULL Iterator

把c++ 程式碼升級到vs2005後才發現,先前vector::iterator ite = NULL之類的程式碼都編譯不過了,經過google一番後才發現,似乎STL的iterator本來就不存在著NULL的觀念,只能利用其他的變數,或是利用ite = some_container.end() 來達到類似的效果。

參考資料:
  • http://www.mip.ups-tlse.fr/~grundman/stl-tutorial/tutorial.html

    Why doesn't STL have null iterator values? STL iterators are supposed to be generalized pointers, right? That phrase has been bandied about a great deal, but it is very misleading. STL iterators are generalizations of array pointers, that is, a pointer set to point into an array, and then incremented or decremented. It does not make sense to talk about such a pointer having a null value.

    In C and C++, null pointers are used to indicate errors, or abnormal conditions. When you have a C++ iterator type, there is normally only one kind of error value it will return: one indicating "I fell off the end of the list". It is natural, therefore, for most iterator classes to use null as the "past-the-end" value. If you find yourself wanting a null STL iterator, you probably want the past-the-end value.