Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
pro_mary
1 / 1 / 0
Регистрация: 23.03.2009
Сообщений: 100
Завершенные тесты: 1
1

Динамическое размещение массива структур

05.04.2012, 10:55. Просмотров 2651. Ответов 12
Метки нет (Все метки)

В коде ниже создается массив из трех структур cs и инициализируется некими значениями.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <iostream>
struct cs
{
    char name[25];
    double w;
    int cal;
};
 
int main()
{
    cs candy[3] =
    {
        {"candy1", 13.7, 457},
        {"cnady2", 15.9, 433},
        {"candy3", 27.4, 987}
    };
 
    return 0;
}
Нужно вместо объявления массива из трех структур cs, использовать new для динамического размещения массива и инициализировать его.
С использованием new понятно:
C++
1
cs * ps = new cs[3];
Вроде бы так.. А вот как инициализировать этот массив?

Спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 10:55
Ответы с готовыми решениями:

Динамическое размещение массива структур
Подскажите пожалуйста, как динамически разместить массив из нескольких...

Динамическое размещение объекта в определённом месте памяти с последующим её освобождением
Доброго времени суток. В C++ имеется возможность размещать объект по чётко...

Написать программу обработки двумерных массивов, используя динамическое размещение данных
Сформировать вектор из наименьших значений элементов столбцов и найти их...

Динамическое выделение памяти для структур
Добрый день. Есть следующие структуры: typedef struct...

Можно ли присвоить одному массиву структур значение другого массива структур и записать его в файл
Можно ли присвоить одному массиву структур значение другого массива структур и...

12
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.04.2012, 11:03 2
C++
1
ps[0] = ...
Только так, инициализировать массивы конструктором, если используется new, запрещено стандартом.
0
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
05.04.2012, 11:51 3
diagon, Ну. не только.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class C
{
public:
   explicit C(const int val):value(val)
   {
   }
   const int get_value() const { return value; }
private:
   int value;
};
 
int main()
{
   const size_t size = 3;
   C* array = new C[size] {C(1),C(2),C(3)};
   for (size_t i = 0; i < size; ++i)
   {
      std::cout << array[i].get_value() << std::endl;
   }
}
Bash
1
2
3
4
5
forever@pterois:~/My_pro1/cpp_pro$ g++ -o new new.cpp -std=c++0x
forever@pterois:~/My_pro1/cpp_pro$ ./new 
1
2
3
2
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.04.2012, 12:50 4
Цитата Сообщение от ForEveR Посмотреть сообщение
diagon, Ну. не только.
Ну, я немного другое имел в виду.
Если записать вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
struct cs
{
    char name[25];
    double w;
    int cal;
};
 
int main()
{
    cs * candy = new cs[3] (
    {
        {"candy1", 13.7, 457},
        {"cnady2", 15.9, 433},
        {"candy3", 27.4, 987}
    } );
 
    return 0;
}
То получим
Bash
1
test.cpp:16:7: ошибка: ISO C++ запрещает использовать инициализацию при создании массивов с помощью new [-fpermissive]
Хотя, почему в таком случае компилируется ваш пример, не совсем понимаю.
0
pro_mary
1 / 1 / 0
Регистрация: 23.03.2009
Сообщений: 100
Завершенные тесты: 1
05.04.2012, 21:14  [ТС] 5
вроде бы компилируется... А в чем может быть ошибка?? Поясните, пожалуйста..
0
Миниатюры
Динамическое размещение массива структур  
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
06.04.2012, 12:22 6
diagon,
When the value of the expression in a noptr-new-declarator is zero, the allocation function is called to
allocate an array with no elements. If the value of that expression is less than zero or such that the size
of the allocated object would exceed the implementation-defined limit, or if the new-initializer is a braced-
init-list
for which the number of initializer-clauses exceeds the number of elements to initialize, no storage
is obtained and the new-expression terminates by throwing an exception of a type that would match a
handler (15.3) of type std::bad_array_new_length (18.6.2.2).
Пожалуй единственное что нашел об этом...
1
Agrik
6 / 6 / 2
Регистрация: 31.03.2013
Сообщений: 120
06.02.2014, 23:39 7
Как я понял ответа нету?( У меня с ТС одна и та же задача. Надо через new динамически объявить массив и инициализировать. На последнем действии ошибку выдаёт. Вернее как и при статическом объявлении инициализация не проходит и через индексы тоже.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<string>
struct CandyBar
{
    char name[30];
    float weight;
    int calor;
    
};
int main()
{
using namespace std;
CandyBar *ps = new CandyBar [3];
 
ps[0]={"Muncha Mon", 17.4, 25};
ps[1]=  {"Body Scru", 35.5, 56};
ps[2]=  {"Dobey Bru", 30.1, 63};
 
delete [] ps;
 
system("PAUSE");
return 0;
}
0
SatanaXIII
Почетный модератор
Эксперт С++
5773 / 2773 / 377
Регистрация: 01.11.2011
Сообщений: 6,743
Завершенные тесты: 1
07.02.2014, 09:06 8
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
#include<iostream>
#include<string>
struct CandyBar
{
    char  name[30];
    float weight;
    int   calor;
 
};
int main()
{
using namespace std;
CandyBar *ps = new CandyBar [3];
 
CandyBar static_CandyBar = {"Muncha Mon", 17.4, 25}; // Вот так можно потому, что статические
ps[0] = static_CandyBar;                             //  структуры можно инициализировать конструктором
 
ps[1] = {"Muncha Mon", 17.4, 25};                    // А вот так нельзя потому, что динамические нельзя
 
ps[2].name   = "Dobey Bru";               // Только и остается что поштучно
ps[2].weight = 30.1;                      //
ps[2].calor  = 63;                        //
 
delete [] ps;
 
system("PAUSE");
return 0;
}
0
Agrik
6 / 6 / 2
Регистрация: 31.03.2013
Сообщений: 120
07.02.2014, 22:19 9
SatanaXIII, не компилируется код в визуал студио

Добавлено через 6 минут
Пишет что ps[2] должен быть модифицируемым
0
DU
1487 / 1133 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
07.02.2014, 22:24 10
C++
1
ps[2].name   = "Dobey Bru";
так в массив чаров строку не скопировать. нужно какую-нибудь strcpy использовать.
а еще лучше иcпользовать не массив символов, а std::string
1
Agrik
6 / 6 / 2
Регистрация: 31.03.2013
Сообщений: 120
07.02.2014, 23:54 11
DU, по заданию нужен динамический массив структур.
0
DU
1487 / 1133 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
08.02.2014, 00:03 12
использование внутри структуры std::string name; вместо char name[25] заданию не противоречит.
0
Agrik
6 / 6 / 2
Регистрация: 31.03.2013
Сообщений: 120
09.02.2014, 15:19 13
Вот, что в итоге получилось:
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
#include<iostream>
#include<string>
struct CandyBar
{
    std::string name;
    float weight;
    int   calor;
 
};
int main()
{
using namespace std;
    
    CandyBar *ps = new CandyBar [3];
    
    ps[0].name= "Muncha Mon";
    ps[0].weight=350.5;
    ps[0].calor=12;
    ps[1].name= "Body Scru";
    ps[1].weight=125.7;
    ps[1].calor=38;
    ps[2].name   = "Dobey Bru";               
    ps[2].weight = 30.1;                      
    ps[2].calor  = 63;                        
    
    cout<<"1 struct: "<<ps[0].name<<", "<<ps[0].weight<<", "<<ps[0].calor<<"."<<endl;
    cout<<"2 struct: "<<ps[1].name<<", "<<ps[1].weight<<", "<<ps[1].calor<<"."<<endl;
    cout<<"3 struct: "<<ps[2].name<<", "<<ps[2].weight<<", "<<ps[2].calor<<"."<<endl;
 
    delete [] ps;
 
system("PAUSE");
return 0;
}
Код полностью рабочий!
0
09.02.2014, 15:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2014, 15:19

Динамическое выделение памяти под массив структур (new/delete)
Люди добрые, подскажите пожалуйста, где в моем коде закралась ошибка? Интернет...

Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур.
Здраствуйте.Помогите с практичкой мое задание 4.3. Строка таблицы данных...

Размещение элементов массива по спирали
Как разместить элементы массива (nxn) по спирали (начиная с нижнего левого угла...


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

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

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