Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
КамазПодарков
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
1

Какой максимальный размер vector?

07.11.2014, 13:11. Просмотров 2173. Ответов 20
Метки нет (Все метки)

Добрый день!
Пишу программку и на строчке
C++
1
2
3
for (int i = 0; i < vec.size(); ++i) {
    // do something;
}
Задумался, что vec у меня может быть достаточно большим и если его размер больше INT_MAX, произойдет какая-то гадость. Решил отдельно разобраться с этим вопросом. Но так и не вышло. Попробовал создать длинный вектор
C++
1
std::vector<int> vec(INT_MAX, 0);
или
C++
1
2
3
4
5
std::vector<int> vec;
for (int i = 0; i< INT_MAX; ++i) {
    vec.push_back(0);
}
vec.push_back(0);
Оба раза прога вылетела.
Но она вылетает и в случае
C++
1
std::vector<int> vec(INT_MAX - 1, 0);
Вопрос: какого размера можно создавать вектора, и всегда ли корректно работает .size() ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2014, 13:11
Ответы с готовыми решениями:

Максимальный размер массива, vector, set, map
Как можно узнать максимальный размер массива, vector, set, map, стеков,...

Какой максимальный размер строки можно зашифровать?
Хочу зашифровать текст с помощью cryptopp, но у меня получается зашифровать...

Какой максимальный размер двумерного массива можно создать?
Ребят возник вопрос. Самый большой тип знаковый- это __int64. Там максимальный...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>)
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b'...

Как изменять размер std::vector<std::vector>?
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: ...

20
S_el
2151 / 1679 / 353
Регистрация: 15.12.2013
Сообщений: 6,644
07.11.2014, 13:18 2
КамазПодарков, http://ru.cppreference.com/w/cpp/container/vector/max_size
1
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
07.11.2014, 13:25 3
КамазПодарков, определяется максимальным размером непрерывного куска памяти, который может выделить система приложению
0
КамазПодарков
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
07.11.2014, 13:26  [ТС] 4
S_el, спасибо, что-то я туплю, думал, что это то же что и capasity();
А почему для char вектор в 4 раза длиннее можно сделать, чем для Int-ов
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
07.11.2014, 13:27 5
Цитата Сообщение от КамазПодарков Посмотреть сообщение
А почему для char вектор в 4 раза длиннее можно сделать, чем для Int-ов
потому что размер char - 1 байт, а размер int - 4 байта
0
КамазПодарков
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
07.11.2014, 13:36  [ТС] 6
aLarman, разумно) Но вопросы остаются..
Почему вот так нельзя сделать тогда? У меня лично оно вылетает.
C++
1
    vector<char> sd(2147483647, ch);
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
07.11.2014, 13:49 7
КамазПодарков, ну, потому что Вы тут создаете вектор который состоит из 2147483647 элементов со значениями ch, и система не смогла выделить непрерывный кусок памяти под это
0
КамазПодарков
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
07.11.2014, 13:54  [ТС] 8
Ну я спросил у этой самой системы какого максимального размера можно сделать вектор из char-ов.
C++
1
2
vector<char> vec;
std::cout << vec.max_size();
Она сказала, что можно даже в два раза больше, чем 2147483647. А тут что-то ломается. Неясно мне, в общем.
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
07.11.2014, 13:55 9
КамазПодарков, там же написано, чисто теоретический размер
1
КамазПодарков
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
07.11.2014, 13:57  [ТС] 10
Ну ок, спасибки!
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
07.11.2014, 13:59 11
КамазПодарков, размер этот завист от size_type-а, в данном случае им является size_t (или unsigned int) у него максимальное значение как раз 2147483647 но это не значит что система Вам позволит зарезервировать участок памяти такого размера, т.е это примерно 2ГБ, в случае если элементами будет char
0
Toshkarik
1149 / 866 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
07.11.2014, 14:42 12
Цитата Сообщение от aLarman Посмотреть сообщение
size_t (или unsigned int) у него максимальное значение как раз 2147483647
4294967295. На то оно и unsigned.
1
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
07.11.2014, 14:58 13
Toshkarik,да Вы правы, тогда что то не сходится
0
Toshkarik
1149 / 866 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
07.11.2014, 15:04 14
aLarman, все сходится, просто Вы не поняли немного ТС.
Цитата Сообщение от КамазПодарков Посмотреть сообщение
vector<char> vec;
std::cout << vec.max_size();
Она сказала, что можно даже в два раза больше, чем 2147483647. А тут что-то ломается. Неясно мне, в общем.
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
07.11.2014, 15:10 15
а ну вот все встало на свои места
vector<char>::max_size() = 4294967295
vector<int>::max_size() = 1073741823

все таки получается не так как описано на сайте http://ru.cppreference.com

а
C++
1
numeric_limit<size_type>::max()/sizeof(value_type)
Добавлено через 2 минуты
Toshkarik, не не у меня не сходится вот с этой формулировкой
This value is typically equal to std::numeric_limits<size_type>::max()
вот отсюда
0
Toshkarik
1149 / 866 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
07.11.2014, 15:15 16
Цитата Сообщение от aLarman Посмотреть сообщение
This value is typically equal to std::numeric_limits<size_type>::max()
А кто их знает, может автор этого текста 'typicaly' использует только vector< char >. Высказывание размыто, я вообще не люблю этот сайт, больше предпочитаю http://www.cplusplus.com/reference/
0
aLarman
07.11.2014, 15:18
  #17

Не по теме:

Цитата Сообщение от Toshkarik Посмотреть сообщение
больше предпочитаю
я тоже :)

0
S_el
07.11.2014, 15:20
  #18

Не по теме:

Цитата Сообщение от Toshkarik Посмотреть сообщение
Высказывание размыто, я вообще не люблю этот сайт, больше предпочитаю http://www.cplusplus.com/reference/
Я тоже,но он на английском,которым я владею плохо :)

0
Tulosba
07.11.2014, 16:07
  #19

Не по теме:

Цитата Сообщение от S_el Посмотреть сообщение
но он на английском,которым я владею плохо
тогда Вам в эту тему: Кто как обзывает переменные / типы в своём коде? (нотация) :)

0
Ilot
07.11.2014, 16:10     Какой максимальный размер vector?
  #20

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
я тоже
И я,
И я,
И я того же мнения!

0
07.11.2014, 16:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2014, 16:10
Привет! Вот еще темы с ответами:

размер vector'a
как узнать размер двумерного вектора отдельно по вертикали и горизонтали

Vector.insert ругается на размер
#include &lt;QCoreApplication&gt; #include &lt;list&gt; #include &lt;iostream&gt; #include...

Какой максимальный размер матриц можно задать для перемножения?
Привет кодеры! Тут вопрос такой. Решил я перемножить матрицы и заинтересовался...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru