Мне нравится последовательность. Я недавно задал вопрос об использовании std::begin
против например std::vector<int>::begin
и единогласное решение, похоже, заключалось в том, чтобы использовать первое, поскольку оно носит более общий характер. Но я думаю, что нашел в грязи палку. Иногда, вы хотите передать, что вы не будете менять контейнер во время его цикла, следовательно, вызывая std::vector<int>::cbegin
, Это сделало бы ваш код довольно асимметричным, если бы вы иногда делали iter = v.cbegin()
и другие времена сделали iter = begin(v)
, Есть ли способ обойти это отсутствие симметрии, и вы все равно порекомендуете std::begin
учитывая это знание? Почему C ++ не имеет std::cbegin
?
C ++ 14 имеет cbegin
/cend
/так далее. и он начинает быть доступен в основных компиляторах.
Например, когда ваш контейнер объявлен как «const», он передается функции как foo(const std::vector<int> & v)
, затем std::begin
на самом деле вернет const_iterator
,