Стандартные контейнеры определяют требования CopyConstructible и Assignable для типа значения, и эти требования достаточны для поддержки всех операций над контейнерами и последовательностями (вы также можете захотеть, чтобы они были сопоставимы для ассоциативных контейнеров, но даже это не требуется.поскольку вместо этого вы можете предоставить компаратор).
То, что вы запрашиваете, - это иметь один набор требований для набора операций, состоящего из части Контейнера плюс кое-что из Последовательности (а именно 1-параметр resize()
для тех контейнеров, которые никогда не перемещают свое содержимое, operator[]
, clear()
и интерфейс итератора, исключая *it = t
), и другой набор требований для остальных.Стандартные библиотеки предпочитают делать это наоборот: выбрать общий набор требований, которые охватывают почти все, а затем предъявляют дополнительные требования для небольших функциональных возможностей (например, требование быть конструируемым по умолчанию для вызова resize()
безуказание второго параметра).
Контейнеры просто не были задуманы с учетом вашего конкретного набора операций - копирование и присвоение являются неотъемлемой частью того, для чего они предназначены, то есть для хранения значений, которые помещаются вих, так что я полагаю, что, по мнению Степанова, это не «маленький функционал».Таким образом, существуют более широкие требования, поскольку контейнер абстракции больше, чем предложенный вами объект ResizeableCollectionOfDefaultConstructedObjects.Фактически, уберите resize()
, и CollectionOfDefaultConstructedObjects - это всего лишь массив.Я полагаю, что разработчики стандартов STL и C ++ не сталкивались с вашим вариантом использования достаточно часто, чтобы считать его заслуживающим абстракции.