Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
NS-17_R-18
0 / 0 / 2
Регистрация: 08.03.2016
Сообщений: 83
Завершенные тесты: 1
1

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

13.01.2017, 16:54. Просмотров 1097. Ответов 11
Метки нет (Все метки)

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

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

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

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

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

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

Динамический массив структур
Прога почти готова интересует как сделать вот это добавление и удаление...

11
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
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*
1
Raali
647 / 350 / 75
Регистрация: 06.07.2013
Сообщений: 1,123
Завершенные тесты: 1
13.01.2017, 17:14 3
Цитата Сообщение от Bretbas Посмотреть сообщение
Только не забудьте выделить память
зачем, ему ж не надо юзать массив может быть, а нужен просто указатель
0
NS-17_R-18
0 / 0 / 2
Регистрация: 08.03.2016
Сообщений: 83
Завершенные тесты: 1
13.01.2017, 17:33  [ТС] 4
Цитата Сообщение от Bretbas Посмотреть сообщение
C++
Охохо спасибо, но я б такое и сам набросал =))) Просто, затык случился с тем что есть вообще этот указатель на байт и зачем он нужен куда присунуть то его) (т.к. гугол не особо помог, а ранее не стакливался) Ну да ладно теперь после обозначеного вами стоит другой вопрос у меня: как собственно заполнять "голый" метод который использовал в структуре ранее cin >> arr[i].name не хочет =)
0
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
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
NS-17_R-18
0 / 0 / 2
Регистрация: 08.03.2016
Сообщений: 83
Завершенные тесты: 1
14.01.2017, 00:35  [ТС] 6
Цитата Сообщение от Bretbas Посмотреть сообщение
У меня все работает:
Я просто вообще не понял сути задачи потому и не вбросил код =))
Смотрите я это понял так: >строка, целое число, указатель на байт, указатель на число с плавающей точкой.
тобишь мы должны ввести строку, целое число, укль на байт, укль на число ? Или что ? Вот тут я и повис. Что я могу ввести что бы проверить что б правильно работало ?! Эти задачи как-то странно поставленны, но спасибо Вам за помощь!
0
Nemovok
293 / 122 / 106
Регистрация: 30.10.2015
Сообщений: 689
Завершенные тесты: 2
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
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
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
NS-17_R-18
0 / 0 / 2
Регистрация: 08.03.2016
Сообщений: 83
Завершенные тесты: 1
14.01.2017, 13:02  [ТС] 9
Цитата Сообщение от Nemovok Посмотреть сообщение
Вот так тоже можно:
Уже делал с std::vector и чуть на допсу не ушел т.к. надо указателями)))) (дада те самые с которым за пределы области уходишь))

Цитата Сообщение от Bretbas Посмотреть сообщение
Вот дописал.
Большое спасибо! Эхехе придеца разбираться (просто планировал канонично по наводкам написать экс-самостоятельно ибо затык случился в том что не понял что хотят)))))
0
Bretbas
Каждому свое
521 / 207 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
14.01.2017, 15:32 10
NS-17_R-18, удачи
1
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
14.01.2017, 19:23 11
Цитата Сообщение от Bretbas Посмотреть сообщение
вместо встроенных динамических массивов
Конечно лучше, ведь встроенных динамических массивов в с++ попросту никогда не было, нет и, скорее всего, не будет никогда.
1
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
14.01.2017, 19:36 12
Цитата Сообщение от GbaLog- Посмотреть сообщение
встроенных динамических массивов в с++ попросту никогда не было, нет и, скорее всего, не будет никогда
Именно. А что же тогда было?
1
14.01.2017, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2017, 19:36

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

Динамический массив структур
Нужно создать базу данных библиотеки состоящую из структур: книга, автор,...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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