Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3

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

28.06.2016, 11:07. Показов 5223. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Умею создавать только фиксированное количество структур, так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct UserInfo
{
   UnicodeString Name;
   UnicodeString mail; 
   UnicodeString Date; 
}; 
UserInfo *UI;
 
UI = new UserInfo[1000];
for(int i = 0; i < 1000; i++)
{ 
      UI[i].Name = "";
      UI[i].mail = "";
      UI[i].Date = "";
}

Можно ли как то динамически наполнять такую структуру, что бы с ней также далее работать через индекс "i"? . То порой приходится получать от сервера всего двух пользователь, а порой 100 (то есть не известно заранее сколько прийдет данных), что бы не выделять столько памяти.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2016, 11:07
Ответы с готовыми решениями:

Создание и заполнение массива структур
подскажите пожалуйста как правильно сделать массив структур(без форм)

Создание динамического массива структур и его удаление
Господа, поясните пожалуйста следующий момент: создаю структуру: struct TTagList { WideString Comment; int...

Создание массива массивов структур с++
Здравствуйте! Подскажите, пожалуйста, возможно ли создание массива (известной длинны), элементами которого должны стать массивы структур...

21
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
28.06.2016, 11:26
C++
1
2
int size = 10; // Количество структур
UserInfo* UI = new UserInfo[i];
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
28.06.2016, 11:28  [ТС]
d7d1c, ни чем не отличается о того что написал в примере, тут так же заранее известно сколько резервируем.
Мне бы динамически наполняемую.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,878
Записей в блоге: 12
28.06.2016, 11:35
Цитата Сообщение от Dinkin Посмотреть сообщение
тут так же заранее известно сколько резервируем
"Тут" как минимум не константа, а переменная задает количество элементов, а следовательно, может быть прочитана во время выполнения программы.

Так более понятно:
C++
1
2
3
4
5
6
7
8
    int size = Edit1->Text.ToIntDef(100);
    UI = new UserInfo[size];
    for (int i = 0; i < size; i++)
    {
        UI[i].Name = "";
        UI[i].mail = "";
        UI[i].Date = "";
    }
?
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
28.06.2016, 11:43  [ТС]
Ну это все равно я заранее должен знать сколько мне поступит пакетов с пользователями, что бы определить значение этой переменной. Но мне желательно уже до прихода данных иметь местечко куда их можно определить (если так возможно).

PS. Конечно можно сначала слать кол-во найденных результатов c SQL сервера, но это крайняя мера =).
0
40 / 21 / 3
Регистрация: 27.04.2015
Сообщений: 176
28.06.2016, 11:47
Dinkin, возьми тогда уже vector, и по мере поступления, используй push_back().
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,878
Записей в блоге: 12
28.06.2016, 11:47
Лучший ответ Сообщение было отмечено Dinkin как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct UserInfo
{
    UnicodeString Name;
    UnicodeString mail;
    UnicodeString Date;
    UserInfo(UnicodeString AName = "", UnicodeString AMail = "", UnicodeString ADate = "") :
    Name(AName), mail(AMail), Date(ADate)
    {
    }
};
 
std::vector<UserInfo> vec;
 
// ...
    vec.push_back(UserInfo());
    vec.push_back(UserInfo("first", "my@gmail.com", "1/1/2002")); // push_back можно сделать и в цикле
 
// ...
    ShowMessage(vec[1].mail); // Обращение по индексу, выведет "my@gmail.com"
2
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
28.06.2016, 11:51  [ТС]
Да , Спасибо!
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
30.06.2016, 00:24  [ТС]
А как правильно после этот массив очищать,для того что бы заново наполнить?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,878
Записей в блоге: 12
30.06.2016, 08:24
C++
1
vec.clear();
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
09.09.2016, 16:04  [ТС]
а если создаю данную структуру в паблике главной формы, то как мне в нее добавить элементы..? ни как немогу найти из другой формы UserInfo
0
Модератор
 Аватар для D1973
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
10.09.2016, 08:34
C++
1
2
3
4
void __fastcall TForm2::FormCreate(TObject *Sender)
{
  std::vector<TForm1::UserInfo> vec;
}
Добавлено через 44 минуты
Или объяви в том же public, где объявляется структура, свой вектор
C++
1
std::vector<UserInfo> vec;
и обращайся к нему из другого модуля
C++
1
Form1->vec.push_back(...);
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
10.09.2016, 17:09  [ТС]
Так и сделал, но когда делаю
C++
1
 Form1->vec.push_bac(UserInfo.....
он не может найти сам UserInfo.....и Form1->UserInfo и не помогает
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,878
Записей в блоге: 12
10.09.2016, 18:00
Dinkin, где описана struct UserInfo? Если в Unit1.h - то все должно работать безо всяких TForm1::
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
10.09.2016, 18:38  [ТС]
Вот объявил в Unit1.h в паблик так:

//структура для разделов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 struct GroupGrid
 {
   int           id_group;
   int           id_link;
   int           tip;
   int           parent_user;
   int           img;
   int           cont_works;
   int           prava;
   UnicodeString name;
   AnsiString    setting;
 
   GroupGrid(int Aid_group=-1,int Aid_link =-1,int Atip =-1,int Aparent_user =-1, int Aimg=-1,int Acont_works=0,int Aprava=0,UnicodeString Aname ="",AnsiString Asetting="") :
   id_group(Aid_group), id_link( Aid_link), tip(Atip),  parent_user(Aparent_user),img(Aimg), cont_works(Acont_works),prava(Aprava),name(Aname), setting( Asetting)
     {
     }
 };
 std::vector<GroupGrid> vec_group;


а из другой формы, делаю так

C++
1
MAIN->vec_group.push_back(GroupGrid(1,2,3,4,5,6,7,9,0));

а он мне вот так :
C++
1
[bcc64 Error] Potok_Unit.cpp(285): use of undeclared identifier 'GroupGrid'
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,878
Записей в блоге: 12
10.09.2016, 21:03
Цитата Сообщение от Dinkin Посмотреть сообщение
в паблик так:
Да не надо никакой паблик. Объяви перед классом формы, и спокойно обращайся потом из любого места программы.

Цитата Сообщение от Dinkin Посмотреть сообщение
Potok_Unit.cpp(285)
А вот в потоке зря ты используешь вектор. Могут быть проблемы...
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
10.09.2016, 22:14  [ТС]
Объявил структуру до
C++
1
class TMAIN : public TForm
Сам вектор пробовал создать как паблике, так и при создании формы.

Теперь он пишет, что не иницилизировано:
C++
1
[bcc64 Error] Potok_Unit.cpp(284): no matching constructor for initialization of 'GroupGrid'

А просто в потоке принимаю данные, думал там же и наполнять массив, или луче ка кто через функцию? или в обще как луче то будет?
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
10.09.2016, 22:21
Цитата Сообщение от volvo Посмотреть сообщение
Могут быть проблемы
а какие, если не секрет?
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
10.09.2016, 22:33
Цитата Сообщение от Gdasar Посмотреть сообщение
а какие, если не секрет?
Мне тоже интересно. В потоке вообще нельзя использовать вектор или в определенных случаях нельзя?
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
10.09.2016, 23:38  [ТС]
прошу прощения, последний совет..и все заработало...просто забыл передать в вектор один из параметров
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.09.2016, 23:38
Помогаю со студенческими работами здесь

Создание массива структур посредствам оператор new
#include &lt;iostream&gt; #include &lt;string&gt; struct car{ std::string producer; int production_year; }; int main() { ...

Создание копии динамического массива структур
Есть динамический массив структур, есть сортировка. Проблема заключается в том, что если сделать сортировку, то массив изменится, а мне это...

Преобразование кода в ряд структур, создание динамического массива
Здравствуйте, у меня вопрос, как данный ниже код можно преобразовать в структурах, чтобы массив был динамическим #include...

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

Создание многомерного массива-структур
Нужно создать и сразу заполнить массив-структур 20-6(6-строк, 20-столбцов) Например, структура: struct Train { public...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru