DanielDemidko
@DanielDemidko
Программист

В чём преимущество функций над методами контейнеров?

В последних версиях C++ (11, 14, 17) в пространстве имён std появились функции аналогичные некоторым методам стандартных контейнеров. Например std::size, std::begin, std::end.
Зачем это нужно? Ведь у каждого контейнера и раньше были методы .size() и .begin()
Чем такие "глобальные" функции лучше методов?
std::vector someData{1, 2, 3};
// Чем это
std::size(someData);
// Лучше этого?
someData.size();
  • Вопрос задан
  • 207 просмотров
Решения вопроса 3
terrier
@terrier
Ну, прямо сразу мы получаем возможность вызывать std::size() еще и для C-массивов, кроме стандартных контейнеров.
Также, для нестандартных контейнеров, доступа к коду которых нет, всегда можно добавить свободные функции begin(), end(), size() , в отличие от методов.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Каких-то особых преимуществ нет. Просто альтернативный вариант.
Это шаблонная функция, может принимать любой из стандартных контейнеров std, она просто вызывает obj.size() внутри.
Чем хотите, тем и пользуйтесь.
https://en.cppreference.com/w/cpp/iterator/size
Ответ написан
Комментировать
@laphroaig
С точки зрения производительности преимуществ нет, скорее наоборот - контейнер некоторые операции может выполнить быстрее исходя из особенностей внутреннего строения. Такие функции хороши для обобщенного кода. Но это в общем, для приведенных примеров разницы нет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы