1) when I cout << *i << endl;, I find that it still points to 4 which means that the iterator i still remains pointed at the original begin() not the new begin().
now my question would be is this behaviour consistent(always happens) and also manifest in the other STL containers like map, vector, list, dequeue, etc?
as in would the iterator always point to where it was originally pointed to even when elements are inserted in its position?
2) Another question I have would be do lists of iterators take up alot of memory?
1) It depends on the container, each works in a different way. For example, std::vector may require all the elements to be moved to perform the insertion, so old iterators won't be valid
1) so is it advisable to take advantage of this behaviour? as in will it not work or work differently on different compilers with different implementations of the same container?