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

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

Войти
Регистрация
Восстановить пароль
 
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
#1

Про массивы. - C++

16.12.2011, 13:22. Просмотров 667. Ответов 7
Метки нет (Все метки)

Пытался анализировать вместимость стандартных массивов в С++. в том числе и 2мерных. оказывается есть значительные ограничения. И при чем как то вот встретил такую вот странность.
Когда объявляю например:
C++
1
unsigned long int Mass[10000000]; //т.е. 1*10 в 7й степени.
или
C++
1
short             Mass2[100000000]; //а тут может влезть 1*10 в 8й степени
А там где long - 8я степень критична. Короче говоря, предполагаю что все это объясняется с точки зрения с++, но вопрос вот в чем, если мне нужна массив 1*10 в 9й степени мне как быть?
и 2мерные массивы. они существенно короче. А мне для вполне конкретной задачи просто не хватает
длинны. Например :
C++
1
short  Mass2[40000][40000];
- такой массив не хочет создаваться. Как быть?

Добавлено через 1 час 18 минут
Соотв. 4х мерный массив может быть таким:
short Mass2[100][100][100][100]; - добавление доп нолика ведет к ошибке.

Добавлено через 11 минут
Проверил динамические массивы. Получается ровно такая же фигня. т.е. массив можно создать сколь угодно большим но работать прекращает на тех же интервалах что и массивы стековые.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 13:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Про массивы. (C++):

Про массивы - C++
Привет всем! Можете подсказать ответ на такой вопрос. Создаю статический массив: unsigned char buf; ...

Задачка про массивы - C++
Только начала изучать программирование, пытаюсь разбиратся ,но не всё так просто , помогите пжлст решить задачку на массивы Даны два...

задaчки про массивы - C++
вот прошли одномерные и двумерные массивы...задачки в книжке очень легкие...Может вы задайте мне задачки порешать?

Про массивы и указатели - C++
#include <iostream> using namespace std; int Digit = { {1,8,6,7},{3,2,9,4},{5,1,2,7},{8,6,2,5} }, test; int main() { ...

задача про массивы - C++
упорядочить по убыванию положительные эл-ты массмва, сохраняя остальные эл-ты на прежних местах

про двумерные массивы - C++
Даны два двумерных массива целых чисел с размерами (5х5) эле¬ментов каждый. Подсчитать произведение элементов главных диагоналей в каждом...

7
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
16.12.2011, 13:34 #2
Присоединяюсь к вопросу,у меня
C++
1
double M[100000]
уже не работает
0
serejkus
47 / 45 / 4
Регистрация: 31.10.2011
Сообщений: 98
16.12.2011, 13:35 #3
Языки C/C++ имеют ограничения на максимальный размер массива - обычно это максимальное значение size_t (где можно точно посмотреть, сейчас не вспомню, но можно ориентироваться на ULONG_MAX из limits.h). Это ограничение платформо-зависимое, так что смотрите соответствующие константы на своей машине.
N-мерные массивы - суть одномерные, но с индексацией по N индексов, т.е. массив a[N1][N2] есть одномерный массив размером N1 * N2. Когда вы говорите a[v1][v2], то компилятор делает так: a[v1 * v2 + v2].
0
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
16.12.2011, 17:29  [ТС] #4
ну очевидно что есть ограничение. Вопрос, как это обойти?!

Добавлено через 3 часа 17 минут
видимо это был риторический вопрос. Уважаемые эксперты, ну хоть подтвердите, что изменить уже ничего нельзя.
0
serejkus
47 / 45 / 4
Регистрация: 31.10.2011
Сообщений: 98
16.12.2011, 19:01 #5
Цитата Сообщение от Андрей2011 Посмотреть сообщение
ну очевидно что есть ограничение. Вопрос, как это обойти?!

Добавлено через 3 часа 17 минут
видимо это был риторический вопрос. Уважаемые эксперты, ну хоть подтвердите, что изменить уже ничего нельзя.
Я не знаю способа "обойти" это ограничение, насколько я помню, это особенность языка.
Могу предложить примитивное решение в лоб: создаёте класс контейнер, который адресуется числами типа double (надо не забывать про точность этих чисел). В этом классе динамически выделять массивы по мере необходимости, получать элементы по схеме, описанной выше.
К примеру, создали сразу массив размера ULONG_MAX, понадобилось еще - создаёте ещё один массив (либо опять размера ULONG_MAX, либо меньше - смотрите сами. Ну и так далее.
0
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
17.12.2011, 20:43 #6
Я где-то читал, что так как переменные создаються в стэковой памяти, то ограничения идут именно оттуда. А вообще можно создавать массив в динамической памяти там размер ограничен только твоей оперативной памятью.

C++
1
 int *arr = new int [10000000]
0
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
17.12.2011, 20:54 #7
Записывайте в файл, или создавайте динамический масив.
0
serejkus
47 / 45 / 4
Регистрация: 31.10.2011
Сообщений: 98
17.12.2011, 23:31 #8
Цитата Сообщение от soican Посмотреть сообщение
Я где-то читал, что так как переменные создаються в стэковой памяти, то ограничения идут именно оттуда. А вообще можно создавать массив в динамической памяти там размер ограничен только твоей оперативной памятью.

C++
1
 int *arr = new int [10000000]
Думается мне, что ограничение связано не с тем, где выделяется память, а с тем, как она адресуется. Еще раз: обычно максимальный размер массива равен максимальному беззнаковому целому. Не очень ясно как вы будете получать значение из ячейки памяти за номером ULONG_MAX + N (ну и не менее непонятно, как выделить память такого размера в heap'е).
0
17.12.2011, 23:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 23:31
Привет! Вот еще темы с ответами:

массивы задача про отрезок - C++
в массиве А определите отрезок данной длины К с максимальной суммой элементов.сначала вводится N и К затем элеметы массива .в ответе...

Задачка про двумерные массивы - C++
Задача о замочной скважине, подойдет ли ключ к замку. Даны мозаичные изображения замочной скважины и ключ. Нужно узнать, пройдёт ли ключ в...

Пара вопросов про массивы - C++
у меня есть пара вопросов,хотя один можно сказать относится к функциям..но тема у нас в курсе-массивы. Так вот: 1.void main() { const...

Ошибка в задаче про массивы - C++
Написал прогу,строго не судите,но какой то косяк здесь не знаю даже где,она должна Найти сумму элементов массива, которые находятся ...


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

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

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