With a const_iterator you can't modify what it references, if you have a const collection class, you must use a const_iterator, or if you are in a const method, then any members (including any collection classes) may not be modified, so again, you must use a const_iterator.