Each element does indeed have a unique address in memory. Basically, let's look at this sample vector:
template <class T>
class vec
{
public:
vec() ;
~vec() ;
T * elements;
}
You can see here is just an example of a vector. So what the iterators do is point to each pointer in the element. They may not have a unique address themselves, but they point to each element in the vector. So each iterator has UNIQUE memory addresses.
And like I said in my comments, they can't work differently since the Vectors and their iterators are libraries made by people like you, using C++. They can't work differently from pointers which are built in the C++ language.
Also from references: (draft of C++0x):
23.2.6 Class template vector [vector]
1 A vector is a sequence container that supports random access iterators. In addition, it supports (amortized)
constant time insert and erase operations at the end; insert and erase in the middle take linear time. Storage
management is handled automatically, though hints can be given to improve efficiency. The elements of a
vector are stored contiguously, meaning that if v
is a vector<T, Allocator>
where T
is some type other
than bool, then it obeys the identity &v[n] == &v[0] + n
for all 0 <= n < v.size()
.