Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Maria ->∞
106 / 86 / 44
Регистрация: 27.08.2013
Сообщений: 1,300
Записей в блоге: 1
1

Записать 100 млн элементов в vector<double>

13.06.2016, 23:14. Просмотров 411. Ответов 5
Метки нет (Все метки)

Доброй ночи!
Хочу в векторе получить 10^8 элементов типа double.
Пытаюсь загнать элементы,но в цикле вылетает исключение.
C++
1
2
3
4
5
6
7
int K = 100000000;
    vector<double> vec_double;
    
    for (int i = 1; i <= K; i++){
        double tmp = 1.0 / i;
        vec_double.push_back(tmp);
    }
max_size возвращает 536 млн с чем то, то есть по идее 100 млн точно должны поместиться в вектор,тогда в чем проблема?
C++
1
cout<<vec_double.max_size()<<endl;
0
Миниатюры
Записать 100 млн элементов в vector<double>  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2016, 23:14
Ответы с готовыми решениями:

Перенос данных c vector<string> в vector<double>
Необходимо перенести введенные данные в vector&lt;string&gt; в vector&lt;double&gt;, я реализовал это вот так:...

Ошибка: Невозможно преобразовать аргумент из "VM::vector<double,2>" в "VM::vector<double,2>"
Невозможно преобразовать аргумент 1 из &quot;VM::vector&lt;double,2&gt;&quot; в &quot;VM::vector&lt;double,2&gt;&quot;. Что за...

std::copy из vector<double> в *double, непонятный warning
double myD={10,20,30,40,50,60,70}; std::vector&lt;double&gt; myvector (7); std::copy ( myD, myD+7,...

vector<vector<double>> + std::sort()
Позвольте узнать... Возможно ли через vector&lt;vector&lt;double&gt;&gt; и функцию std::sort() отсортировать...

5
72 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
13.06.2016, 23:36 2
Попробуйте deque, если для вас он приемлем.

Добавлено через 5 минут
И заранее резервируйте память, если известен размер коллекции.
1
2685 / 1856 / 552
Регистрация: 05.06.2014
Сообщений: 5,361
13.06.2016, 23:49 3
Цитата Сообщение от DmitryM5 Посмотреть сообщение
max_size возвращает 536 млн с чем то, то есть по идее 100 млн точно должны поместиться в вектор,тогда в чем проблема?
Проблема, видимо, в стратегии расширения массива "создай новый, скопируй в него старый, старый удали" и 32-битовой системе. На момент "создай новый" вам потребуется примерно два гига памяти (гиг на старый массив, гиг на новый). А 32-битовая Винда как раз больше двух гигабайт выделить не дает (еще два - резерв под ОС). Вот тут, видимо, программа и падает.

Добавлено через 4 минуты
Цитата Сообщение от DmitryM5 Посмотреть сообщение
max_size возвращает 536 млн
Это теоретический максимум для идеальных условий, сферического процессора и глубокого вакуума вокруг него. Реальное количество доступной памяти оно не показывает.
3
Maria ->∞
106 / 86 / 44
Регистрация: 27.08.2013
Сообщений: 1,300
Записей в блоге: 1
13.06.2016, 23:51  [ТС] 4
Цитата Сообщение от mishelle92 Посмотреть сообщение
И заранее резервируйте память, если известен размер коллекции.
C++
1
2
3
4
5
6
7
int K = 100000000;
    vector<double> vec_double(K);
    
    for (int i = 1; i <= K; i++){
        double tmp = 1.0 / i;
        vec_double[i-1]=(tmp);
    }
Так вроде сработало.

Добавлено через 1 минуту
Цитата Сообщение от Renji Посмотреть сообщение
Проблема, видимо, в стратегии расширения массива "создай новый, скопируй в него старый, старый удали" и 32-битовой системе
Что имеете ввиду по этим?
Операция Push_back() создает новый вектор и копирует в него?
0
2685 / 1856 / 552
Регистрация: 05.06.2014
Сообщений: 5,361
14.06.2016, 00:03 5
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Что имеете ввиду по этим?
Именно то что написано. Вектор гарантирует что все его элементы расположены в памяти строго друг за другом. А значит, наращивать его можно только до тех пор, пока конец вектора не упрется в чьи-то данные. После этого приходится переносить данные вектора в более просторное место. Вот здесь и включается стратегия "выделить блок памяти, скопировать в него старый, старый прибить".
1
Maria ->∞
106 / 86 / 44
Регистрация: 27.08.2013
Сообщений: 1,300
Записей в блоге: 1
14.06.2016, 00:04  [ТС] 6
Благодарю!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2016, 00:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Cannot convert 'std::vector<double>' to 'double'
Помогите пожалуйста исправить ошибки, понимаю почему они тут но не знаю как исправить ...

Продано 100 млн копий Windows 7
За шесть месяцев количество проданных копий операционной системы Windows 7 достигло планки в сто...

Как сложить два vector и записать в третий vector ?
Не получается сложить два вектора по элементно и записать в третий . Складываю уже переведенные...

Записать числа из файла в двумерный массив или вектор вроде такого vector<vector<int>>
Добрый день, подскажите пожалуйста как лучше и проще считывать файл. в файле записаны числа,...

Записать vector<vector<wchar_t>> в текстовый файл
Подскажите пожалуйста, как записать vector&lt;vector&lt;wchar_t&gt;&gt; в файл. Файл необходимо открывать через...

Поиск и замена данных в массивах 100 тыс. - 1 млн
Доброго времени суток. Есть файлы сsv и екселя. Основной файл - порядка 1 млн строк 20 столбцов...


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

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

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