Это относится к максимальному размеру из-за ограничений в вашей библиотеке / коде или системе. Например, очень надуманный пример: ваша реализация использовала короткое (2 байта) число без знака для хранения количества записей в вашем векторе. Тогда ваша функция max_size вернет 65 536, поскольку ваша библиотека будет иметь это ограничение из-за плохой реализации.
В качестве еще одного и более реалистичного примера, если вы знали, что максимальный размер вашего вектора в байтах был ограничен 4 ГБ, а размер, содержащийся в контейнере, составлял 128 байт на экземпляр, то max_size вернул бы что-нибудь на мелодию 33554431. (0xFFFFFFFF / 128)
Ниже показано, как это делается в моей реализации C ++. По сути, найти наибольшее значение size_type (без знака -1), а затем разделить его на размер объекта, сохраняемого в векторе. (тип ценности)
На 32-битном оборудовании size_type(-1)
даст 4 294 967 295, а если вы сохраните unsigned int
, то ваше значение sizeof(value_type)
даст 4 байта, что даст max_size()
возвращаемое значение 1 073 741 823.
/** Returns the size() of the largest possible %vector. */
size_type max_size() const
{
return size_type(-1) / sizeof(value_type);
}