c++ c++11 iterator const-correctness

c++ - ¿Hay alguna manera de utilizar ''std:: begin` independiente y de un const_iterator?



c++11 const-correctness (2)

Me gusta la coherencia. Hace poco pregunté sobre el uso de std::begin vs. eg std::vector<int>::begin , y la decisión unánime parecía ser utilizar el primero ya que es más general. Pero creo que encontré un palo en el barro. A veces, desea transmitir que no va a cambiar un contenedor mientras lo recorre, por lo tanto, debe llamar a std::vector<int>::cbegin . Sería bastante asimétrico si tu código hiciera iter = v.cbegin() y otras veces iter = begin(v) . ¿Hay alguna forma de evitar esta falta de simetría, y aún recomendaría std::begin dado este conocimiento? ¿Por qué C ++ no tiene std::cbegin ?


Cuando su contenedor se declara "const", por ejemplo, se pasa a una función como foo(const std::vector<int> & v) , luego std::begin realmente devolverá un const_iterator .


C ++ 14 tiene cbegin / cend / etc. y está comenzando a estar disponible en los principales compiladores.