C ++ Векторная библиотека, Воссоздание для назначения, функция максимального размера - PullRequest
5 голосов
/ 28 февраля 2012

Для задания я должен воссоздать векторную библиотеку C ++, и в настоящее время я застрял в том, как вернуть максимальный размер.

По данным этого сайта: http://www.cplusplus.com/reference/stl/vector/ size_type max_size () const; Вернуть максимальный размер

Возвращает максимальное количество элементов, которое может содержать векторный контейнер.


В настоящее время мои функции основаны на манипулировании массивами, а библиотека векторов не основана на классе шаблонов, библиотека векторов использует типы данных int и size_t. (Я не уверен, имеет ли это какое-либо отношение к этому)

Соответствующий код:

class vector{
private:
int *vect;
size_t length;
size_t cap;

public:
//=====================Constructor================
vector(){
    length = 0;
    cap = 20;
    vect = new int[20];
}

//INCOMPLETE
size_t max_size() const{
    //return???!?!?!?!?
}

}

Ответы [ 2 ]

5 голосов
/ 28 февраля 2012

Это относится к максимальному размеру из-за ограничений в вашей библиотеке / коде или системе. Например, очень надуманный пример: ваша реализация использовала короткое (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); 
}
1 голос
/ 28 февраля 2012

Отсюда по вашей ссылке дано:

но максимальный потенциальный размер, который вектор может достичь из-за ограничений реализации системы или библиотеки

В вашем случае max_size - это максимальный размер целочисленного массива в системе.

...