On Mon, 19 Jul 2010 17:54:59 -0400, Mafi <m...@example.org> wrote:

I have to say that I'm not a specialist in STL or C++ in general but as far as I know an iterator is class mainly consisting of a pointer to the container, the current index and the operator-overloadd-function for ++.

So what can you do with a iterator that you can't do with
   KeyType delegate(KeyType,Container /* which is indexed by KeyType */)

No, an iterator is a pointer to an *element* in the container. The lookup is a simple dereference, not an indexing operation. They even work on containers that don't support indexing.

The benefit of iterators is speed of lookup and reference to a single element. Ranges represent a pair of iterators, with the benefit that they are always properly ordered and are related. Many STL functions accept 2 iterators but are undefined if the two iterators are not related or ordered properly. Ranges have a huge benefit over iterators for this, and most of STL's algorithm is based on pairs of iterators. However, ranges generally refer to *two* elements, a begin and an end element. This has some disadvantages when you want to only refer to one element.

-Steve

Reply via email to