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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Как обьявить массив неизвестного размера? - C++

31.10.2013, 10:37. Просмотров 1274. Ответов 9
Метки нет (Все метки)

Помогите разобраться, есть класс, в котором обьявлен двумерный массив структур. Размер массива неизвестен, но должен быть определен во время выполнения функции load(). Как это сделать?

C++
#define MAX 512
 
class CModel {
public:
  struct SVertex {
    float x, y;
  };
 
  SVertex vertex[MAX][???]; // КАК ЭТО СДЕЛАТЬ?
 
  // загрузка модели
  void load(unsigned int id)
  {
    int count = rand()%100; // от 0 до 99
 
    for(int i=0; i<count; i++) {
      vertex[id][i].x = (float)rand()%10;
      vertex[id][i].y = (float)rand()%10;
    }
  }
  // рисование модели
  void draw(unsigned int id)
  {
    функция_рисования(&vertex[id][0]);
  }
 
} model;
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 10:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как обьявить массив неизвестного размера? (C++):

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

Массив неизвестного размера - C++
Хочу написать функцию для нахождения предела последовательности. А и eps вводятся с клавиатуры. Цикл do while - обязательное условие. n...

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

Ввод текста неизвестного размера в массив - C++
(Консольное приложение) Я хочу сделать так чтобы при вводе текста программа записывала каждый символ по порядку (в том числе и пробел) из...

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

Как обьявить и инициализировать массив константных значений? - C++
Пробовал вот таким вот образом в заголовочном файле const int big_numbers = { 1000, 2000, 3000 }; error C2059: syntax error : '{'...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
31.10.2013, 10:39 #2
programina, Указатель использовать, вектор, еще что-то. Так нельзя, ибо при декларации многомерного массива мы обязаны указать все размерности кроме первой.
1
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
31.10.2013, 10:52 #3
C++
1
std::vector< std::vector< SVertex > > vertex;
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
31.10.2013, 10:55  [ТС] #4
ForEveR, а так можно?
C++
SVertex ** vertex = new SVertex*[MAX];
 
for(int i = 0; i < count; i++)
    vertex[id] = new SVertex[i];
...
for(int i = 0; i < count; i++)
    vertex[id][i].x = (float)rand()%10;
0
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.10.2013, 10:59 #5
можно и так. Просто с векторами вам не надо будет парится насчет освобождения памяти. Да и интерфейс там более чем понятный.
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
31.10.2013, 10:59 #6
programina, Можно, почему нет, но лучше естественно юзать вектор.
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
31.10.2013, 11:39  [ТС] #7
Цитата Сообщение от programina Посмотреть сообщение
ForEveR, а так можно?
C++
SVertex ** vertex = new SVertex*[MAX];
 
for(int i = 0; i < count; i++)
    vertex[id] = new SVertex[i];
...
for(int i = 0; i < count; i++)
    vertex[id][i].x = (float)rand()%10;
блин, я туплю сегодня, это тоже самое

Добавлено через 39 минут
Не хочу векторы, они медленные.
0
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
31.10.2013, 11:40 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от programina Посмотреть сообщение
Не хочу векторы, они медленные.
Ахаха, programina что ты делаешь!? Продолжай!
3
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
31.10.2013, 11:55 #9
programina, Вы просто не умеете их готовить. Не говоря уже о том, что в релизе они настолько же быстрые насколько массив.
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
31.10.2013, 12:09  [ТС] #10
Цитата Сообщение от ForEveR Посмотреть сообщение
programina, Вы просто не умеете их готовить. Не говоря уже о том, что в релизе они настолько же быстрые насколько массив.
Поверю на слово, но позже обязательно проверю в коде.
Суть даже не в том, что они могут быть медленными, а в том, что хочется как можно меньше использовать высокоуровневые конструкции с++. Возможно, это страх перед новым, я же всетаки новичок
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2013, 12:09
Привет! Вот еще темы с ответами:

Как динамически обьявить многомерный массив (ptr = new int[5][5])? - C++
как обявить вот такую вот штуку: int * ptr = new int; заранее благодарен Роман.

Чтение файла неизвестного размера - C++
Необходимо прочитать файл неизвестного размера, динамически растягивая массив, загнать файл в массив и узнать его размер. Приведите...

Умножение матрицы неизвестного размера - C++
задание такоэ нужно ввести размерность 2 матриц с клавиатуры а потом их перемножить... но проблема в том что не знаю как записать...

Ввод и вывод строки неизвестного размера - C++
Как ввести и вывести строку неизвестного размера в c++? Нигде просто нормального объяснения не нашел.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.10.2013, 12:09
Ответ Создать тему
Опции темы

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