Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
#1

Динамический массив с большим количеством элементов - C++

13.03.2013, 00:15. Просмотров 3224. Ответов 61
Метки нет (Все метки)

Нужно создать динамический массив (каждый элемент целое положительное число до 10^9), который по введенным данным создавал N элементов массива, где N может быть до 10^5.

unsigned long int *arr = new unsigned long int[num];

Я сделал так, но если количество элементов больше 45920, то выводит ошибку
"terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
This application has requested the Runtime to terminate it in unuasual way.
Please contact the application's support team for more information."
IDE Qt Creator.
Статические массивы типа int array[1000000]; сразу выводят ошибку, причем в обоих случая изменение типа элементов массива ничего не меняет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 00:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамический массив с большим количеством элементов (C++):

Создать с помощью new динамический массив с указанным количеством элементов - C++
Так как пока что я учусь самостоятельно у меня нету проверяющего, поэтому прошу вас посмотреть все ли правильно я делаю. Задание:...

Применение массивов случайных чисел с большим количеством элементов - C++
Само задание: Создайте две функции для решения одной и той же задачи: динамическое создание и заполнение случайными числами массива...

Реализовать обработку и файловую запись/чтение массива с большим количеством элементов - C++
такую задачу поставили... имеется 600 000 элементов. Каждому элементу присвоить значение и по 300 000 записать в файл. массив такое...

Строки матрицы, с большим количеством положительных элементов расположить выше остальных - C++
В массиве А(N,M) расположить строки так, чтобы сначала шли строки, у которых положительных элементов больше, чем отрицательных, затем с...

Удалить строку с самым большим количеством слов - C++
помогите написать программу: "Удалить строку с самым большим количеством слов" (используя указатели) С++ Заранее...

Алгоритм быстрой сортировки не работает с большим количеством чисел - C++
Требовалось написать программу с алгоритмами сортировки, затем сравнить эти алгоритмы (но проблема не в этом). Все работает, кроме быстрой...

61
Avazart
Эксперт С++
7233 / 5429 / 303
Регистрация: 10.12.2010
Сообщений: 24,126
Записей в блоге: 17
13.03.2013, 03:55 #31
Цитата Сообщение от ValeryS Посмотреть сообщение
для bool нет нуля есть true и false
чЁ ?
C++
1
if ((mass[j][i]==0) and (i!=j) )
А вот что такое and ?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 03:56 #32
Цитата Сообщение от ValeryS Посмотреть сообщение
для bool нет нуля есть true и false
Ноль приводится к false.

Цитата Сообщение от luck Посмотреть сообщение
олимпиадная задача
Вот с этого надо начинать. Если это олимпиадная задача и она падает на проверочной системе, то 99%, что ваш алгоритм решения — го... не подходит. Целиком.

Цитата Сообщение от Avazart Посмотреть сообщение
А вот что такое and ?
Альтернативный токен. Пункт 2.6 стандарта.
0
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 04:00  [ТС] #33
Алгоритм сработал на 10 проверках. На 11 он не сработал, потому что значение num слишком большое, код ошибки - превышение ограничения памяти.
And это видимо моя привычка с паскаля =\
Странно, что на сях сработало.

Добавлено через 1 минуту
Даже если данное решение не пройдет тесты из-за использования массивов (причем я слабо представляю как обойти в отношении массива arr, хотя массив булевых элементов можно и обойти) - все равно он должен работать на моей машине, а это не так.
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 04:12 #34
Ммм... ОС у вас точно 64-битная?

А то 45920 x 45920 = 2108646400 = чуть меньше 2 гигабайт. Плюс ещё что-то на указатели, библиотеки и т. п. 2 гига — это предел виртуальной памяти на 32-битной Винде (без хитростей). Совпадает же.
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,232
13.03.2013, 04:13 #35
Цитата Сообщение от Avazart Посмотреть сообщение
чЁ ?
Те!
на то она и логическая переменная чтобы работать с логическими значениями
а то что 0 равен false, ничего не значит
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Ноль приводится к false.
я с этим и не спорю
но писать нужно правильно
не пишут ведь
C++
1
 char c=0x41;
а пишут
C++
1
char c='A';
0
Avazart
Эксперт С++
7233 / 5429 / 303
Регистрация: 10.12.2010
Сообщений: 24,126
Записей в блоге: 17
13.03.2013, 04:18 #36
Цитата Сообщение от ValeryS Посмотреть сообщение
Те!
на то она и логическая переменная чтобы работать с логическими значениями
а то что 0 равен false, ничего не значит
Вы хотите сказать что может быть иначе ?
0
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 04:19  [ТС] #37
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
ОС у вас точно 64-битная?
64-битная. Но интересный факт, надо будет иметь в виду)
0
Avazart
Эксперт С++
7233 / 5429 / 303
Регистрация: 10.12.2010
Сообщений: 24,126
Записей в блоге: 17
13.03.2013, 04:22 #38
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Ммм... ОС у вас точно 64-битная?
А то 45920 x 45920 = 2108646400 = чуть меньше 2 гигабайт. Плюс ещё что-то на указатели, библиотеки и т. п. 2 гига — это предел виртуальной памяти на 32-битной Винде (без хитростей). Совпадает же.
Ну да гдето так у меня удавалось ужрать 1.7 Г до исключения...
Цитата Сообщение от luck Посмотреть сообщение
64-битная. Но интересный факт, надо будет иметь в виду)
Ну так а компилятор какой стоит ? Может из-за этого ?
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,232
13.03.2013, 04:26 #39
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
А то 45920 x 45920 = 2108646400 = чуть меньше 2 гигабайт.
да побольше будет
сначала выделяется память под 45920 указателя а они по 4 байта
Цитата Сообщение от luck Посмотреть сообщение
bool **mass = new bool*[num];
а только потом 45920 блока памяти по 45920 байт
0
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 04:27  [ТС] #40
Использую IDE Qt Creator, как проверить какой компилятор он использует? Или существует какой то стандартный Qt?
0
Avazart
Эксперт С++
7233 / 5429 / 303
Регистрация: 10.12.2010
Сообщений: 24,126
Записей в блоге: 17
13.03.2013, 04:28 #41
Цитата Сообщение от luck Посмотреть сообщение
Использую IDE Qt Creator, как проверить какой компилятор он использует? Или существует какой то стандартный Qt?
А какой качал ?
0
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 04:35  [ТС] #42
кажется этот - http://rutracker.org/forum/viewtopic.php?t=4038622

Добавлено через 4 минуты
Без булевого массива все работает (но я не уверен, как себя поведет прога на моем компе при большом количестве элементов - по понятным причинам 60к значений с клавиатуры забить сложно). Но на тестах выходит перебор по времени выполнения на этом же самом тесте из-за вдвое большего количества итераций цикла =\
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,232
13.03.2013, 04:57 #43
Цитата Сообщение от Avazart Посмотреть сообщение
Вы хотите сказать что может быть иначе ?
я хочу сказать что в стандарте написано
3.9.1 Fundamental types
..........
6 Values of type bool are either true or false.[Note: there are no signed, unsigned, short, or long bool types or values. —end note ] As described below, bool values behave as integral types. Values of type bool participate in
integral promotions
где написано 0 1

правда дальше читаем
4.5 Integral promotions
...............
An rvalue of type bool can be converted to an rvalue of type int, with false becoming zero and true becoming one
но здесь то речь уже идет о преобразовании
0
luck
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 63
13.03.2013, 05:01  [ТС] #44
Встретится комбинация [j][i]. Это была попытка уменьшить количества вхождений во внутренности if-a из-за двойного прохождения. Допустим есть удачная комбинация i=2;j=4. Без булева массива цикл войдет в if ещё и при i=4;j=2.
Вообщем вопрос можно оставить для теоретических исследований - алгоритм действительно
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
го... не подходит
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,232
13.03.2013, 05:06 #45
Цитата Сообщение от luck Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
for (i=0;i<num;i++)
   for (j=0;j<num;j++)
        if ((mass[j][i]==0) and (i!=j) )
           if (func(arr[i])==func(arr[j]))
            {
                res++;
               mass[i][j]=1;
             }
если я правильно понял логику
не проще написать так
C++
1
2
3
4
for(int i=0;i<num-1;i++)
  for(int j=i+1;j<num;j++)
          if (func(arr[i])==func(arr[j]))
                res++;
и нафиг никакой массив не нужен
1
13.03.2013, 05:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 05:06
Привет! Вот еще темы с ответами:

Определить номер строки матрицы с наиболее большим количеством нулей - C++
с помощью датчика случайных чисел заполнить двоичную матрицу 5 10. определить номер строки с наиболее большим количеством нулей

Задан массив с количеством элементов n - C++
Задан массив с количеством элементов n.Сформировать 2 массива:в 1 включить элементы исходного массива с чётными номерами,а во 2 с нечётными

Массив с неизвестным количеством элементов - C++
Как задать char массив, количество элементов которого мне неизвестно? Туда может быть записано 10 элементов, а может и 25 или еще больше. ...

Как преобразовать массив в динамический? Массив вычисляет сумму элементов каждой диагонали матрицы - C++
Ошибка : Вызвано исключение по адресу 0x00BB2F4F в Проект6.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE05. #...


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

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

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