Есть ли способ использовать автономный ' std:: begin` и для итератора const?


Мне нравится последовательность. Недавно я задал вопрос об использовании std::begin против, например, std::vector<int>::begin, и единогласное решение, по-видимому, состояло в том, чтобы использовать первое, поскольку оно является более общим. Но я думаю, что нашел палку в грязи. Иногда вы хотите передать, что вы не будете изменять контейнер, когда вы проходите через него, поэтому вызываете std::vector<int>::cbegin. Это сделало бы ваш код довольно асимметричным, если бы вы иногда делали iter = v.cbegin() , а в другие времена делали iter = begin(v). Есть ли способ обойти это отсутствие симметрии, и вы все еще рекомендуете std::begin учитывая эти знания? Почему в C++ нет std::cbegin?

2 9

2 ответа:

C++14 имеет cbegin/cend/и т.д. и он начинает быть доступным в основных компиляторах.

Когда ваш контейнер объявлен "const", например, он передается функции как foo(const std::vector<int> & v), то std::begin фактически вернет const_iterator.