выделение векторного пространства в c ++ [дубликат]

Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.

Иногда вы можете просто забыть инициализировать .

Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.

10
задан Kirill V. Lyadvinsky 28 September 2010 в 14:43
поделиться

3 ответа

max_size() - теоретическое максимальное количество элементов, которые можно поместить в ваш вектор. В 32-битной системе теоретически можно выделить 4Gb == 2 ^ 32, что составляет 2 ^ 32 char, значения 2 ^ 30 int или значения 2 ^ 29 double. Похоже, что ваша реализация использует это значение, но вычитает 1.

Конечно, вы никогда не могли бы выделить вектор, большой; у вас не хватит памяти задолго до этого.

Нет требования о том, какое значение max_size() возвращает, кроме того, что вы не можете выделить вектор, который больше этого. В 64-битной системе он может вернуть 2 ^ 64-1 для char, или он может вернуть меньшее значение, потому что система имеет ограниченное пространство памяти. 64-разрядные ПК часто ограничены 48-разрядным адресным пространством.

18
ответ дан Anthony Williams 26 August 2018 в 15:07
поделиться

Просто получите ответ

Vector<data-type>v;
Cout<< v.max_size();

Или мы можем получить ответ

(2^bit of system)/sizeof(datatype) -1
Eg for 64 bit system
Iong long datatype has size =8 bit
Ans =(2^64)/8 -1
2305843009213693951
1
ответ дан Dev911 26 August 2018 в 15:07
поделиться

max_size () возвращает

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

], поэтому я полагаю, что максимальное значение зависит от реализации. На моей машине следующий код

std::vector<int> v;
cout << v.max_size();

производит вывод:

4611686018427387903 // built as 64-bit target
1073741823 // built as 32-bit target

, поэтому формула 2 ^ (размер 64 (тип)) - 1 выглядит правильно для этого случая как хорошо.

6
ответ дан Vladimir 26 August 2018 в 15:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: