Существуют ли какие-либо общие предпочтения или правила, которые объясняют, когда вместо свободных функций std::begin
и std::end
?
Насколько я понимаю, если функция является шаблоном, в котором тип контейнера является параметром шаблона, то следует использовать std::begin
и std::end
, то есть:
template<class T> void do_stuff( const T& t )
{
std::for_each( std::begin(t), std::end(t), /* some stuff */ );
}
Как насчет в других сценариях, таких как стандартная/членная функция, где известен тип контейнера? По-прежнему ли лучше использовать std::begin(cont)
и std::end(cont)
или должны ли функции члена контейнера cont.begin()
и cont.end()
быть предпочтительными?
Правильно ли я полагаю, что нет никакой пользы в производительности, вызывая cont.end()
over std::end(cont)
?