Стандартный ISO C++ имеет богатую библиотеку алгоритмов, включающую большое количество синтаксического сахара, такого как std::max_element
, std::fill
, std::count
и т. д.
Мне трудно понять, почему ISO считает целесообразным стандартизировать многие такие тривиальные алгоритмы, но не перегружать алгоритмы, которые работают с целыми контейнерами.
Я действительно не понимаю, почему они добавили такие базовые вещи, когда мы остались без целых версий контейнера (конечно, самый распространенный случай) или аналогичным образом остались с жестокостью, которая является идиомой векторного стирания-удаления:
v.erase(std::remove(v.begin(), v.end(), elem), v.end());
Кажется, что каждый проект, который я пишу на C++, заканчивает тем, что я включаю свой собственный заголовочный файл, который включает базовый синтаксический сахар для подобных вещей.
Конечно, любая из тривиальных перегрузок всего контейнера может быть включена в собственный заголовок. Это также верно для многих простых алгоритмов, которые были стандартизированы.
Я пытаюсь понять, почему в стандарте есть веская причина для таких вещей, как std::max_element
и std::fill
в диапазонах, но не для версий, которые работают с целыми контейнерами, или для другого синтаксического сахара, который уменьшает многословность написания кода C++.