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

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

28.06.2016, 11:07. Показов 5359. Ответов 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,154
Записей в блоге: 3
28.06.2016, 11:28  [ТС]
d7d1c, ни чем не отличается о того что написал в примере, тут так же заранее известно сколько резервируем.
Мне бы динамически наполняемую.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 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,154
Записей в блоге: 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
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 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,154
Записей в блоге: 3
28.06.2016, 11:51  [ТС]
Да , Спасибо!
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
30.06.2016, 00:24  [ТС]
А как правильно после этот массив очищать,для того что бы заново наполнить?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
30.06.2016, 08:24
C++
1
vec.clear();
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 3
09.09.2016, 16:04  [ТС]
а если создаю данную структуру в паблике главной формы, то как мне в нее добавить элементы..? ни как немогу найти из другой формы UserInfo
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 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,154
Записей в блоге: 3
10.09.2016, 17:09  [ТС]
Так и сделал, но когда делаю
C++
1
 Form1->vec.push_bac(UserInfo.....
он не может найти сам UserInfo.....и Form1->UserInfo и не помогает
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
10.09.2016, 18:00
Dinkin, где описана struct UserInfo? Если в Unit1.h - то все должно работать безо всяких TForm1::
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 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
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
10.09.2016, 21:03
Цитата Сообщение от Dinkin Посмотреть сообщение
в паблик так:
Да не надо никакой паблик. Объяви перед классом формы, и спокойно обращайся потом из любого места программы.

Цитата Сообщение от Dinkin Посмотреть сообщение
Potok_Unit.cpp(285)
А вот в потоке зря ты используешь вектор. Могут быть проблемы...
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,154
Записей в блоге: 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,154
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru