I like consistency. I recently asked the question of using std::begin
vs. 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 calling std::vector<int>::cbegin
. It would make your code quite asymmetric if you sometimes did iter = v.cbegin()
and other times did iter = begin(v)
. Is there a way around this lack of symmetry, and would you still recommend std::begin
given this knowledge? Why does C++ not have std::cbegin
?
C++14 has cbegin
/cend
/etc. and it is starting to be available in major compilers.
When your container is declared "const", for example, it is passed to a function as foo(const std::vector<int> & v)
, then std::begin
will actually return a const_iterator
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With