title: Is there an operational difference between std::set::iterator and std::set::const_iterator?
body: <p>For most containers, the <code>iterator</code> type provides read-write access to values in the container, and the <code>const_iterator</code> type provides read-only access. However, for <code>std::set&lt;T&gt;</code>, the iterator type cannot provide read-write access, because modifying a value in the set (potentially) breaks the container invariants. Therefore, in <code>std::set&lt;T&gt;</code>, both <code>iterator</code> and <code>const_iterator</code> provide read-only access.</p>
  
  <p>This leads me to my question: Is there any difference between the things you can do with a <code>std::set&lt;T&gt;::iterator</code> and the things you can do with a <code>std::set&lt;T&gt;::const_iterator</code>?</p>
  
  <p>Note that in C++11, the manipulation methods of containers (e.g., <code>erase</code>) can take <code>const_iterator</code> arguments.</p>