Почему в контейнерах STL нет методов для общих функций?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему в контейнерах STL нет методов для общих функций?

Сообщение Anonymous »

Я понимаю, что на итераторах есть общие функции, которые выполняют все, что вы хотите, например std::find, std::count и т. д., но почему стандартные контейнеры, такие как std::vector и std, не делают этого? ::array имеет над ними некоторую абстракцию для удобства? Например, если у вас есть std::vector с более длинным именем, вам нужно написать

Код: Выделить всё

std::find(nameOfLongNamedStdVector.begin(), nameOfLongNamedStdVector.end(), ...);
когда у нас могло быть что-то вроде

Код: Выделить всё

nameOfLongNameStdVector.find(...);
Я видел аргумент, что нет смысла переопределять функцию, поскольку std::find выполнит эту работу, но ее реализация может использовать std::find и просто действовать как оболочка для удобства. Более того, существуют контейнеры, такие как std::map, у которых есть метод contains, от которого std::vector также будет полезен. Вместо этого, если вы просто хотите узнать, находится ли значение в векторе, вам придется использовать std::find, а затем сравнить его с оператором end, что действительно неуклюже.
Я знаю что специализированные методы существуют там, где они улучшают производительность, но почему бы не добавить их везде для единообразия, удобства, чистоты и читабельности?

Подробнее здесь: https://stackoverflow.com/questions/784 ... -funcitons
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»