Quick Q: Why is there a nonmember begin(), but no nonmember cbegin()? -- StackOverflow
Quick A: There is, in C++14.
From SO:
Is there a way to use standalone std::begin and for a const_iterator?
I like consistency. I recently asked the question of using
std::beginvs. e.g.std::vector<int>::begin, and the unanimous decision seemed to be to use the former since it is more general. But I think I found a stick in the mud. Sometimes, you want to convey you will not change a container as you loop through it, hence callingstd::vector<int>::cbegin. It would make your code quite asymmetric if you sometimes diditer = v.cbegin()and other times diditer = begin(v). Is there a way around this lack of symmetry, and would you still recommendstd::begingiven this knowledge? Why does C++ not havestd::cbegin?

Well timed with the recent release of Boost 1.55, a new
Trust Eric Niebler to deliver the goods -- when it comes to insightful discussion, cool code, and shameless puns:
A nice short overview of when you might want your associative container to use a contiguous implementation instead of a tree under the covers: