Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальный динамический массив, ГУРУ помогите, пожалуйста! 
:(
    Опции темы
Snegovik86
Дата 18.8.2010, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.8.2010

Репутация: нет
Всего: нет



Всем доброго времени суток!
Я более менее знаю язык VB, тк его преподавали в универе, сейчас по роду деятельности(разработчик софта и железа основанного на MK) занялся изучением С++.
Столкнулся с проблемой, разработав алгоритм решающий, поставленную задачу, убедившись в его исправности и выгодности отладил его на VB используя глобально объявленные переменные и массивы(алгоритм подразумевает работу с одними и теме же динамическими массивами из разных процедур), которые подразумевалось в С++ затолкать в одну структуру. Но столкнулся с тем что как писать глобально такую структуру и вызывать её в любой функции не представляю. При том что операторы malloc realloc и free мне известны, и я уже с ними работал.
Подразумевалось следующая структура:
Код

 typedef struct 
{
  int x; //координата х
  int y; //координата у
} TK;// точки контура

typedef struct 
{
  int Ymax;    // верхния точка контура
  int Ymin;    // нижняя точка контура
  int CHmktk;  // Число точек в массиве курсивной точки контура
 TK MKTK[0];             // динамический массив курсивных точк контура
}KTK; // курсивные точки контура

Вопрос 1) Возможно ли в структуре реализовать динамический массив?
Вопрос 2) Проблема в мышлении VB и глобально объявленных массивах? И надо просто сделать глобальные переменные а по функции передавать указатель на массив.
PM MAIL   Вверх
Dem_max
Дата 18.8.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Цитата

Вопрос 1) Возможно ли в структуре реализовать динамический массив?

в структуре можно хранить указатель на динамический массив. 
Код

 typedef struct 
{
  int x; //координата х
  int y; //координата у
  int array*;
} TK;// точки контура

TK tk;
tk.array = new int[200];


Выделили по указателю память на 200 элементов типа int

Цитата

Вопрос 2) Проблема в мышлении VB и глобально объявленных массивах? И надо просто сделать глобальные переменные а по функции передавать указатель на массив.


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


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
SVN74
Дата 18.8.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Структуры в С++ почти как классы, только с меньшей защитой имеют конструкторы и деструкторы...
Код

 typedef struct NM
{
  int x; //координата х
  int y; //координата у
  int *array;
  NM()
  {
    array = new int[200];
  }
  ~NM()
  {
    delete [] array;
  }
} TK;// точки контура

Может Вам лучше использовать классы?

Это сообщение отредактировал(а) SVN74 - 18.8.2010, 17:50
PM MAIL WWW   Вверх
Snegovik86
Дата 19.8.2010, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.8.2010

Репутация: нет
Всего: нет



Проблема в том что я с ними ещё не работал, и если признаться думал что классы это те же структуры...
С одной точки зрения хочется поглубже узнать язык С++ и написать программу так как правильно с точки зрения языка, а с др. стороны так как проще и удобнее и быстрее. Затеял я работу с глобальными структурами только потому что хочу написать так что получше узнать С++... И как ещё более правильнее я не знаю. Поэтому и прошу помощи.
PM MAIL   Вверх
mes
Дата 19.8.2010, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(SVN74 @  18.8.2010,  16:30 Найти цитируемый пост)
 только с меньшей защитой

нельзя ли пояснить ?!  smile 


--------------------
PM MAIL WWW   Вверх
SVN74
Дата 19.8.2010, 10:47 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(mes @  19.8.2010,  09:46 Найти цитируемый пост)
нельзя ли пояснить ?!  

Это сугубо мое личное мнение. 
1. Структура использует стек, а стек не такой уж и большой, учитывая  что структуры могут только копироваться...
2. В отличие от классов структуры работают по прямому доступу к их типам, а классы через указатели...
3. По умолчанию структура в отличие от класса все типы держит открытыми, а это наталкивает на мысль...
Классы используют кучу, не копируются, доступны только через указатели, по умолчанию все типы закрыты.
На мой взгляд, -  возможности защиты класса выше...

PM MAIL WWW   Вверх
mes
Дата 19.8.2010, 11:15 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(SVN74 @  19.8.2010,  09:47 Найти цитируемый пост)
По умолчанию структура в отличие от класса все типы члены держит открытыми,

из сказанного верно только то что в цитате 
 smile 
больше различий между ними нет
 smile

Это сообщение отредактировал(а) mes - 19.8.2010, 11:17


--------------------
PM MAIL WWW   Вверх
JackYF
Дата 19.8.2010, 21:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(SVN74 @  19.8.2010,  09:47 Найти цитируемый пост)
1. Структура использует стек, а стек не такой уж и большой, учитывая  что структуры могут только копироваться...
2. В отличие от классов структуры работают по прямому доступу к их типам, а классы через указатели...

Мне кажется, вы перепутали С++ с чем-то другим.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
bsa
Дата 23.8.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Snegovik86, в С++ динамический массив называется вектор. Для этого в стандартной библиотеке шаблонов существует соответствующий шаблон, который называется vector. Чтобы его использовать, нужно подключить заголовочный файл <vector>, а в том месте, где нужен динамический массив элементов TK написать std::vector<TK>:
Код
 #include <vector>
 typedef struct 
{
  int x; //координата х
  int y; //координата у
} TK;// точки контура
typedef struct 
{
  int Ymax;    // верхния точка контура
  int Ymin;    // нижняя точка контура
  int CHmktk;  // Число точек в массиве курсивной точки контура
  std::vector<TK> MKTK;             // динамический массив курсивных точк контура
}KTK; // курсивные точки контура
MKTK будет такой же переменной, как и остальные. доступ к элементам массива по индексу MKTK[i]. Так же есть метод size(), который возвращает количество элементов в массиве. Остальное можно почитать в документации. А для начала рекомендую зайти в часто задаваемые вопросы и ознакомиться с ними. Возможно, список литературы окажется очень полезен.  smile 
PM   Вверх
Snegovik86
Дата 30.8.2010, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.8.2010

Репутация: нет
Всего: нет



Спасибо большое!  smile Пошёл читать и ваять... 
PM MAIL   Вверх
Snegovik86
Дата 31.8.2010, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.8.2010

Репутация: нет
Всего: нет



Боюсь что так вот
Код

  std::vector<TK> MKTK;

не получиться по причине того что я работаю не совсем с "чистым" С++, а с IAR C/C++ for Advanced RISC Machines Ltd’s для ARM® Cores, а именно для sam9261. Сделал вывод такой вывод т.к. при подключении <vector> выдаёт тьма ошибок при компиляции...
PM MAIL   Вверх
ИванМ
Дата 31.8.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Snegovik86, пользуйтесь значит другим компилятором. Потому что vector это неотъемлемая часть c++ и не поддерживать его стыдно.
PM MAIL   Вверх
djamshud
Дата 31.8.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Дело не в плохом компиляторе, а в том, что не везде уместо поддерживать полностью стандарт С++. То есть урезанный С++ - это не баг, а фича.

Топикстартеру советую гуглить реализации вектора на си. Ну или написать самому.

Добавлено через 24 секунды
Самому можно написать даже с классами.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
ИванМ
Дата 31.8.2010, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Цитата(djamshud @  31.8.2010,  16:32 Найти цитируемый пост)
Дело не в плохом компиляторе, а в том, что не везде уместо поддерживать полностью стандарт С++. То есть урезанный С++ - это не баг, а фича.

В таком случае неуместно его называть C++. Слишком громкое название.
PM MAIL   Вверх
djamshud
Дата 31.8.2010, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Меня совершенно случайно посетила гениальная мысль. Странно, что у компилятора есть заголовочный файл вектор, а скомпилировать его он не может. Возможно запускается С-компилятор вместо С++?


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0600 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.