Каковы требования к типу элемента контейнера в STDLIB? - PullRequest
0 голосов
/ 31 мая 2018

Одна вещь, которую я знаю, может и не быть правдой, это то, что T должен быть копируемым , то есть T должен иметь доступный конструктор копирования.

Однако существуют ли другие требования, например, назначаемое копирование ?

В качестве дополнения я помню, что Effective STL говорит vector<bool>не является стандартным контейнером, потому что он не соответствует требованию T *p=&c[0] быть правильно сформированным.

1 Ответ

0 голосов
/ 31 мая 2018

Я думаю, что существуют разные требования к контейнерам последовательностей и ассоциативным контейнерам.Например, следующее относится к вектору (см. Cppreference.com для более подробной информации).Также обратите внимание, что оно было изменено в более новой версии c ++.

  • T должно соответствовать требованиям CopyAssignable и CopyConstructible.(до C ++ 11)

  • Требования, предъявляемые к элементам, зависят от фактических операций, выполняемых над контейнером.Как правило, требуется, чтобы тип элемента был полным и соответствовал требованиям Erasable, но многие функции-члены предъявляют более строгие требования.(начиная с C ++ 11) (до C ++ 17)

  • Требования, предъявляемые к элементам, зависят от фактических операций, выполняемых над контейнером.Как правило, требуется, чтобы тип элемента соответствовал требованиям Erasable, но многие функции-члены предъявляют более строгие требования.Этот контейнер (но не его члены) может быть создан с неполным типом элемента, если распределитель удовлетворяет требованиям полноты распределителя.(начиная с C ++ 17)

...