С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/140: Рейтинг темы: голосов - 140, средняя оценка - 4.96
0 / 0 / 2
Регистрация: 08.03.2016
Сообщений: 83
1

Создать динамический массив структур

13.01.2017, 16:54. Показов 28771. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый! Собственно задачка:
Определить пользовательский тип (структуру), включающий в себя следующие поля: строка, целое число, указатель на байт, указатель на число с плавающей точкой. Определить динамический массив из N полученных структур.

>указатель на байт
Что это значит ? А то как-то присесть за задачу не могу т.к. затык случился от этой части. Пока прикинул создать
C++
1
struct
и вогнать в массив затем
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2017, 16:54
Ответы с готовыми решениями:

Как создать динамический массив структур?
А как работать с вектором если я хочу динамический массив структур? т.е. допустим struct tovar {...

Динамический массив структур в другом массиве структур
Можно ли реализовать динамический (или статический) массив структур в другом массиве структур?...

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю?
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям...

Динамический массив структур
Нужно сделать динамический массив структур. Задание составить перечень стран и количество...

13
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
13.01.2017, 17:08 2
C++
1
2
3
4
5
6
7
struct MyStruct
{
std :: string myString;
int num;
char* byte;
float* pole;
};
И в коде:
C++
1
 MyStruct* arr = new MyStruct[N];
Только не забудьте выделить память под "указатель на байт" и под указатель на число с плавающей точкой!

Добавлено через 57 секунд
Цитата Сообщение от NS-17_R-18 Посмотреть сообщение
указатель на байт
Что это значит ?
тип char имеет размер в 1 байт, поэтому указатель на байт будет иметь вид char*
2
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
13.01.2017, 17:14 3
Цитата Сообщение от Bretbas Посмотреть сообщение
Только не забудьте выделить память
зачем, ему ж не надо юзать массив может быть, а нужен просто указатель
0
0 / 0 / 2
Регистрация: 08.03.2016
Сообщений: 83
13.01.2017, 17:33  [ТС] 4
Цитата Сообщение от Bretbas Посмотреть сообщение
C++
Охохо спасибо, но я б такое и сам набросал =))) Просто, затык случился с тем что есть вообще этот указатель на байт и зачем он нужен куда присунуть то его) (т.к. гугол не особо помог, а ранее не стакливался) Ну да ладно теперь после обозначеного вами стоит другой вопрос у меня: как собственно заполнять "голый" метод который использовал в структуре ранее cin >> arr[i].name не хочет =)
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
13.01.2017, 19:35 5
NS-17_R-18,
Цитата Сообщение от NS-17_R-18 Посмотреть сообщение
как собственно заполнять "голый" метод который использовал в структуре ранее cin >> arr[i].name не хочет =)
Что такое name? Это я так понимаю строка? std::string?
У меня все работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
...
struct Mystruct
{
    std :: string name;
};
 
int main()
{
    Mystruct* mass = new Mystruct[10];
    std :: cin >> mass[0].name;
    std :: cout << mass[0].name;
}
...
1
0 / 0 / 2
Регистрация: 08.03.2016
Сообщений: 83
14.01.2017, 00:35  [ТС] 6
Цитата Сообщение от Bretbas Посмотреть сообщение
У меня все работает:
Я просто вообще не понял сути задачи потому и не вбросил код =))
Смотрите я это понял так: >строка, целое число, указатель на байт, указатель на число с плавающей точкой.
тобишь мы должны ввести строку, целое число, укль на байт, укль на число ? Или что ? Вот тут я и повис. Что я могу ввести что бы проверить что б правильно работало ?! Эти задачи как-то странно поставленны, но спасибо Вам за помощь!
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
14.01.2017, 01:07 7
Цитата Сообщение от NS-17_R-18 Посмотреть сообщение
пределить динамический массив из N полученных структур.
Вот так тоже можно:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstring>
#include <vector>
 
struct MyStruct
{
  std::string name;
  int num;
  char *byte;
  float *pole;
};
 
int main()
{
  std::vector<MyStruct> vec(10);
 
  return 0;  
}
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
14.01.2017, 08:22 8
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

NS-17_R-18, Вот дописал. Тут массив выделяется, заполняется, выводится на экран, освобождается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
 
struct MyStruct
{
  std::string name;
  int num;
  char *byte;
  double* pole;
};
 
int main()
{
    // Вводим размер массива с клавиатуры
    int n;
    std :: cout << "Input size of array: ";
    std :: cin >> n;
    std :: cout << std :: endl;
    
    // Выделяем память для динамического массива
    MyStruct* arr = new MyStruct[n];
    
    // Заполняем массив данными
    for( auto i = 0; i < n; i++ )
    {
        std :: cout << "Input the string: ";
        std :: cin >> arr[i].name;
        std :: cout << std :: endl;    
        std :: cout << "Input the number: ";
        std :: cin >> arr[i].num;
        std :: cout << std :: endl;
        // При заполнения указателя на байт данными нужно выделить память
        std :: cout << "Input the value of byte: ";
        arr[i].byte = new char;
        std :: cin >> arr[i].byte;
        std :: cout << std :: endl;  
        // При заполнения указателя на вещественное число данными нужно выделить память
        std :: cout << "Input the value of float: ";
        arr[i].pole = new double;
        std :: cin >> *arr[i].pole;
        std :: cout << std :: endl;            
    }
    
    // Выводим на экран все данные массива
    for( auto i = 0; i < n; i++ )
        std :: cout << arr[i].name << "  " << arr[i].num << "  " << arr[i].byte << "  " << *arr[i].pole << std :: endl;
 
    // Если массив больше не нужен, то освобождаем обязательно занятую память
    for( auto i = 0; i < n; i++ )
    {
        delete arr[i].byte; // Освобождаем память занятую указателем на байт
        delete arr[i].pole;// Освобождаем память занятую указателем на вещественное число
    }
    
    delete[] arr;   // Освобождаем память занятую всем массивом
}
Но как сказал Nemovok, для использования динамического массива, предпочтительней юзать std :: vector вместо встроенных динамических массивов
1
0 / 0 / 2
Регистрация: 08.03.2016
Сообщений: 83
14.01.2017, 13:02  [ТС] 9
Цитата Сообщение от Nemovok Посмотреть сообщение
Вот так тоже можно:
Уже делал с std::vector и чуть на допсу не ушел т.к. надо указателями)))) (дада те самые с которым за пределы области уходишь))

Цитата Сообщение от Bretbas Посмотреть сообщение
Вот дописал.
Большое спасибо! Эхехе придеца разбираться (просто планировал канонично по наводкам написать экс-самостоятельно ибо затык случился в том что не понял что хотят)))))
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
14.01.2017, 15:32 10
NS-17_R-18, удачи
1
Любитель чаепитий
3744 / 1800 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
14.01.2017, 19:23 11
Цитата Сообщение от Bretbas Посмотреть сообщение
вместо встроенных динамических массивов
Конечно лучше, ведь встроенных динамических массивов в с++ попросту никогда не было, нет и, скорее всего, не будет никогда.
1
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
14.01.2017, 19:36 12
Цитата Сообщение от GbaLog- Посмотреть сообщение
встроенных динамических массивов в с++ попросту никогда не было, нет и, скорее всего, не будет никогда
Именно. А что же тогда было?
1
3 / 3 / 0
Регистрация: 14.03.2019
Сообщений: 25
02.04.2019, 11:50 13
Цитата Сообщение от Bretbas Посмотреть сообщение
struct MyStruct {
std::string name;
int num;
};

MyStruct* arr = new MyStruct[n];
...........
.................

std :: cin >> arr[i].name;
std :: cin >> arr[i].num;
Только я что-то невкурил, почему используется оператор прямого доступа ".", а не ссылка "->" на члены структуры, посколько динамически создаваемая структура?
То ли у меня мозг слабоват, то ли еще что, но Прата пишет в книге: чтобы не путаться, знайте, что при использовании указателей нужно применять ->.
В программе разрабатывал кстати подобный же пример, что и в листинге выше, мне редактор сам даже переправил на стрелочки, вот я и сидел 2 часа потом парился.
1
0 / 0 / 0
Регистрация: 13.01.2023
Сообщений: 2
13.03.2023, 22:58 14
Могу ошибаться, но как я понял, здесь создаётся динамический массив, а не структура => всё правильно. А по поводу ваших слов про ссылку "->" вы правы)
0
13.03.2023, 22:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2023, 22:58
Помогаю со студенческими работами здесь

Динамический массив структур
Помогите пожалуйста с заданием Создать динамический массив структур (не менее 10 записей) со...

Динамический массив структур
Необходимо создать структуру, и сделать динамический массив структур. Фиксированный массив...

Динамический массив структур
Здравствуйте. Нужна помощь. Не получается записать данные в массив структур. По логике вроде все...

Динамический массив структур
Добрый день. Недавно начал изучать С++. В книге попалась задача в которой требуется сохранение...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru