Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2015, 00:32   #1
sasha1993
Пользователь
 
Регистрация: 26.06.2009
Сообщений: 43
По умолчанию Динамические массивы.

Помогите разобраться с динамическими массивами,ранее работал на Java, и подобных проблем не имел.
В общем есть хендлер с объявлением дин. массива:
Код:
General::vec_3 *vertices;
далее создаю сам массив
Код:
file>>s;
int n=stoi(s);
(model.vertices)=new   General::vec_3[n];
и далее мне нужно узнать размер этого массива в другом классе, я уже понял что sizeof-не поможет,но может есть в C++ ,что-то что вернет мне размер моего массива,конечно можно тупо отдельно хранить размер массива,но это очень не удобно. В общем есть ли в с++ что то на подобие .length из java ?

Последний раз редактировалось sasha1993; 06.10.2015 в 01:17.
sasha1993 вне форума Ответить с цитированием
Старый 06.10.2015, 08:11   #2
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
но может есть в C++ ,что-то что вернет мне размер моего массива,конечно можно тупо отдельно хранить размер массива,но это очень не удобно. В общем есть ли в с++ что то на подобие .length из java ?
НЕТ! Если в Java массив это класс, со своими методами, то в си, С++, это всего лишь указатель на адрес первой ячейки (в Java указателей нет, там ссылки, не путать).
Так что тебе придется хранить размер массива. Можешь так же, использовать std::vector. В этом классе есть метод size(), возвращает размер

Последний раз редактировалось SAMOUCHKA; 06.10.2015 в 08:13.
SAMOUCHKA вне форума Ответить с цитированием
Старый 06.10.2015, 08:17   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Или std::array для неизменяемого размера.

А обычные С массивы лучше не использовать беез необходимости.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 06.10.2015, 09:32   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Как выше правильно заметили, определить размер в массиве (классическом) не возможно. Но, если уж так хочется, можно воспользоваться библиотекой STL. Создать вектор. Вот в векторе, длину массива можно определить.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.10.2015, 09:34   #5
sasha1993
Пользователь
 
Регистрация: 26.06.2009
Сообщений: 43
По умолчанию

Можно уточнить,почему не стоит использовать обычные массивы,какие подводные камни ?
sasha1993 вне форума Ответить с цитированием
Старый 06.10.2015, 09:56   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Чтобы не париться об управлении памятью и изменении размера самому.

Вы ж после Java наверно даже вызвать delete для этого массива забыли.

Ну и некоторые дополнительные фичи.
Например, vector можно передавать либо по значению (копировать), либо по ссылке/const ссылке, а С массивы это всегда просто указатель.
Удобнее использовать с STL функциями (.begin(), .end()).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 06.10.2015 в 10:08.
Alex11223 вне форума Ответить с цитированием
Старый 06.10.2015, 22:51   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Как выше правильно заметили, определить размер в массиве (классическом) не возможно. Но, если уж так хочется, можно воспользоваться библиотекой STL. Создать вектор. Вот в векторе, длину массива можно определить.
в "классическом" читай таком,
который описан в стандарте языка вполне себе возможно.
причем времени компиляции.

но если вы имеете ввиду вовсе не "классический массив",
и совсем даже не "массив",
а указатель на начала блока памяти,
то все равно возможно.

правда у разных компиляторов - разные расширения на этот счет.

например, у cl (вижал студия):
https://msdn.microsoft.com/en-us/library/z2s077bc.aspx

Цитата:
Сообщение от sasha1993 Посмотреть сообщение
В общем есть ли в с++ что то на подобие .length из java ?

file>>s;
int n=stoi(s);
model.vertices = std::vector<General::vec_3>();

...

const size_t length = model.vertices.size();

[/CODE]

Последний раз редактировалось Stilet; 07.10.2015 в 08:17.
_Bers вне форума Ответить с цитированием
Старый 06.10.2015, 23:16   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Ой-ой-ой. Попробуйте определить размерность у такой конструкции:
Код:
const int X = 25;
int Arr[X];
Попробуйте найти размерность массива, не прибегая к использованию константы его создавшей. Уверен, хрен чё получится.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 07.10.2015, 00:18   #9
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Попробуйте найти размерность массива, не прибегая к использованию константы его создавшей. Уверен, хрен чё получится.
Код:
sizeof(Arr)/sizeof(*Arr) ;
http://rextester.com/PSH49232

Размер будет вычислен на этапе компиляции.
Не стоит путать указатель и массив, в C++ это разные вещи.

Последний раз редактировалось Croessmah; 07.10.2015 в 00:21.
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические массивы (c++) vanek1 Помощь студентам 2 20.12.2010 22:50
Динамические массивы Цветик Общие вопросы C/C++ 5 07.11.2010 20:35
Динамические массивы с++ maxsept Общие вопросы C/C++ 2 27.10.2010 20:16
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
Динамические массивы в С Ol'ga Фриланс 6 08.06.2010 10:50