Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.67
Vizlim
3 / 3 / 0
Регистрация: 24.10.2011
Сообщений: 269
#1

Как подсчитать длину динамического массива? - C++

22.10.2006, 17:00. Просмотров 5486. Ответов 9
Метки нет (Все метки)

Лирическое отступлене: С++ мне не нравиться уж больно кривой язык и майкрасофт и борланд как то криво друг с другом взаимодействуют плюс ещё линуксоидные плюсы, муть одним словом =)))
Возник вопрос как можно посчитать длину динамического массива...
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream.h>
int a[]={0};
int b;
int main() {
a[1]=5;
a[2]=7;
cout << "sizeof(a)/sizeof(int)" << sizeof(a)/sizeof(int) << endl;
cin >> b;
return 0;
}
зы: странно в других языках есть функция по вычислению длины массива, а тута хз, все ссылаються на вектора =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2006, 17:00     Как подсчитать длину динамического массива?
Посмотрите здесь:

C++ Как выделить память для динамического массива?
Как подсчитать Длину строки в двойном массиве char C++
Как посмотреть значение динамического массива C++
Как вызвать метод вектора из динамического массива? C++
C++ Как ввести с клавиатуры элементы динамического массива?
Как создать шаблон класса одномерного динамического массива? C++
Как изменить размер динамического массива структур после того как был добавлен товар C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bazile
58 / 34 / 19
Регистрация: 15.03.2007
Сообщений: 6,911
22.10.2006, 17:19     Как подсчитать длину динамического массива? #2
У тебя здесь нет динамического массива, а есть только код который пишет за пределы массива. Изучай STL и начинай пользоваться классом vector<>.
C++
1
2
3
4
std::vector<int> a;
a.push_back(1);
a.push_back(2);
std::cout << a.size() << std::endl;
Vizlim
3 / 3 / 0
Регистрация: 24.10.2011
Сообщений: 269
22.10.2006, 18:16  [ТС]     Как подсчитать длину динамического массива? #3
bazile (22.10.2006)
У тебя здесь нет динамическго массива, а есть только код который пишет за пределы массива....
согласен, по поводу динамического массива это я погарячился =) Здесь безразмерный/без ограничений массив =) И как в безразмерном массиве можно выйти за пределы массива, ведь у безразмерного массива "нет предела"...
Опять вектора =)) Тут уже вопрос принципа возникает, как узнать длину массива в приведённом мною примире? =)
bazile
58 / 34 / 19
Регистрация: 15.03.2007
Сообщений: 6,911
22.10.2006, 18:41     Как подсчитать длину динамического массива? #4
В С++ нет понятия безразмерного массива или массива без ограничений. Запись int a[] = {0} указывает компилятору создать массив с длиной равной 1. Если бы ты написал int a[] = {0,1,2}, то длина массива равнялась бы трем.
Далее, так как нумерация элементов массивов начинается с нуля, то запись a[1]=5 в твоем примере приводит к тому, что ты записываешь данные за пределы массива в область памяти, которой ты не владеешь. Массив при этом не расширяется. Он и не обязан этого делать. Поэтому твой пример абсолютно неправильный.
Выражение sizeof(a)/sizeof(int) является константой и вычисляется на этапе компиляции. Чтобы убедиться в этом напиши вместо int a[] = {0}; строку int a[]; и посмотри что тебе скажет компилятор.
Вектор дает возможность иметь "массив без ограничений". Он выделяет новую память по мере необходимости скрывая детали реализации. Именно поэтому все и советуют им пользоваться.
Vizlim
3 / 3 / 0
Регистрация: 24.10.2011
Сообщений: 269
22.10.2006, 19:44  [ТС]     Как подсчитать длину динамического массива? #5
bazile
Огромное тебе спасибо за пояснения.
хм, но всё же странно если в моём примере вызвать к примеру вывод на дисплей елемент a[8], не задавая его значение, вместо того что бы выдать к примеру ошибку или нечто подобное оно выводит область памяти или нечто т.п. Интересно можно ли это отловить распознавание участкок памяти или нет.
bazile
58 / 34 / 19
Регистрация: 15.03.2007
Сообщений: 6,911
22.10.2006, 20:36     Как подсчитать длину динамического массива? #6
Массивы в С++ не имеют средств контроля выхода на границы. Кстати говоря, vector<> тоже не контролирует выход за границы диапазона. При необходимости программист может реализовать такую функциональность самостоятельно. Сделано это, насколько я знаю, из соображений эффективности. Язык С++ дает программисту широкую свободу действий взамен требуя высокого уровня ответственности за свой код.
Vadim_ig
0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 235
02.11.2006, 12:18     Как подсчитать длину динамического массива? #7
Честно говоря, не вижу проблемы. Да простые массивы достались с++ от с, но что мешает сохранить размер массива при создании??? Или записывай в конец массива специальное значение. Если же вопрос скорости доступа не критичен, то лучше использовать какую-то коллекцию из стандартной библиотеки. Да не такие уж стандартные контейнеры и медленные...
Alexei_A
0 / 0 / 0
Регистрация: 03.10.2006
Сообщений: 19
02.11.2006, 15:02     Как подсчитать длину динамического массива? #8
А можно самому написать простенький класс, типа SafeArray.
...помню курсе на 3-ем на лабах писали защенный двухмерный массив. =)
Vyacheslav
Сообщений: n/a
02.11.2006, 17:42     Как подсчитать длину динамического массива? #9
А можно самому написать простенький класс, типа SafeArray.
Заверни в него <vector>.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2006, 11:04     Как подсчитать длину динамического массива?
Еще ссылки по теме:

C++ Как удалить элементы динамического массива, а не сам массив?
C++ Задать размер динамического массива через переменную, обявленную как extern
C++ Как удалить элемент из динамического массива?
C++ Не получается адрес динамического двумерного массива передать, как аргумент функции
Как организовать сортировку динамического массива C++

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

Или воспользуйтесь поиском по форуму:
Vadim_ig
0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 235
03.11.2006, 11:04     Как подсчитать длину динамического массива? #10
Ну писать свой массив - это для лабы может и не плохо, но в общем-то скорее извращение. Если все что нужно, это контроль границ - в стандартной библиотеке есть вектор с такой функциональностью, называется, если не ошибаюсь, Vec
Yandex
Объявления
03.11.2006, 11:04     Как подсчитать длину динамического массива?
Ответ Создать тему
Опции темы

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