For data types such as std::set and std::map where lookup occurs in logarithmic time, is the implementation required to maintain the begin and end iterators? Does accessing begin and end imply a lookup that could occur in logarithmic time?
I have always assumed that begin and end always occur in constant time, however I can’t find any confirmation of this in Josuttis. Now that I’m working on something where I need to be anal about performance, I want to make sure to cover my bases.
Thanks
They happen in constant time. I’m looking at page 466 of the ISO/IEC 14882:2003 standard:
Table 65 – Container Requiments
a.begin(); (constant complexity)
a.end(); (constant complexity)
Table 66 – Reversible Container Requirements
a.rbegin(); (constant complexity)
a.rend(); (constant complexity)