Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ChipChop
1 / 1 / 0
Регистрация: 29.09.2016
Сообщений: 111
#1

эффективное обращение со структурами - C++

21.11.2016, 10:03. Просмотров 132. Ответов 4
Метки нет (Все метки)

Всем привет.

Есть структура:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct infoRecord
{
    const char* szUid;
    const char* szName;
    const char* szSurname;
    const char* szDate;
    const char* szMoney;
    infoRecord()
    {
        szUid = nullptr;
        szName = nullptr;
        szSurname = nullptr;
        szDate = nullptr;
        szMoney = nullptr;
    }
};
Можно как-то более эффективно обращаться к ее полям?
Иными словами, уйти от пяти строк вызова myRecordArr.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for (int i = 0; i < recordsAmount; i++)
    {
        delete[] myRecordArr[i].szUid;
        delete[] myRecordArr[i].szName;
        delete[] myRecordArr[i].szSurname;
        delete[] myRecordArr[i].szDate;
        delete[] myRecordArr[i].szMoney;
    }
 
void SetData(infoRecord* Obj, int& amount, char* s1, char* s2, char* s3, char* s4, char* s5)
{
    Obj[amount].szUid = s1;
    Obj[amount].szName = s2;
    Obj[amount].szSurname = s3;
    Obj[amount].szDate = s4;
    Obj[amount].szMoney = s5;
    amount++;
}
И еще вопрос на засыпку - как лучше обозвать структуру, хранящую 5 указателей на текстовые строки с инфой о человеке?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2016, 10:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос эффективное обращение со структурами (C++):

Обращение к вложенными структурами - C++
Описал структуру struct personal{ char firstname,lastname,middlename,nationality; struct date{ int day,month,year; }; }; ...

Эффективное выделение памяти - C++
Много раз встречал что размер выделенной памяти рекомендуется округлять до степени двойки. Почему? Так же еще встречался с мнением что...

Эффективное представление матрица - C++
Добрый день. Возникла небольшая проблема: Нужно представить квадратную матрицу в виде массива. Изначально был выбран вариант...

Эффективное использование памяти - C++
Добрый день! Подскажите, пожалуйста, какой способ будет эффективнее всего использовать память при чтении строк из файла? Думала над...

Скотт Мейерс - Эффективное использование C++. 55 верных советов ... - C++
Где найти книгу в элетронном виде??

Работа со структурами - C++
#include&lt;iostream.h&gt; #include&lt;math.h&gt; struct List { float fi,r,z; int n; }; void vvod (List &amp;, int); void vivod (List...

4
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
21.11.2016, 10:35 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ChipChop Посмотреть сообщение
Иными словами, уйти от пяти строк вызова myRecordArr.
C++
1
2
3
4
5
6
7
8
for (int i = 0; i < recordsAmount; i++)
    {
        delete[] myRecordArr[i].szUid;
        delete[] myRecordArr[i].szName;
        delete[] myRecordArr[i].szSurname;
        delete[] myRecordArr[i].szDate;
        delete[] myRecordArr[i].szMoney;
    }
C++
1
2
3
4
5
6
7
8
9
for (int i = 0; i < recordsAmount; i++)
    {
        infoRecord & record = myRecordArr[i];
        delete[] record.szUid;
        delete[] record.szName;
        delete[] record.szSurname;
        delete[] record.szDate;
        delete[] record.szMoney;
    }
Но здесь лучше std::string использовать. Тогда и delete`ы писать не надо будет.
1
zss
Модератор
Эксперт С++
6570 / 6132 / 2021
Регистрация: 18.12.2011
Сообщений: 15,983
Завершенные тесты: 1
21.11.2016, 10:39 #3
Обозвать надо в соответствии с целью.
Если это клиенты банка, например, то Client.
Если сотрудники, то, Staff.

По поводу SetData.
Нельзя присваивать адреса параметров. Они могут быть временными массивами.
Память надо выделять самостоятельно и копировать строки.
C++
1
2
3
4
5
void SetData(infoRecord* Obj, int& amount, char* s1, char* s2, char* s3, char* s4, char* s5)
{
    Obj[amount].szUid=new char[strlen(s1)+1];
    strcpy(Obj[amount].szUid , s1);
...
1
ChipChop
1 / 1 / 0
Регистрация: 29.09.2016
Сообщений: 111
21.11.2016, 11:06  [ТС] #4
Цитата Сообщение от zss Посмотреть сообщение
По поводу SetData.
Нельзя присваивать адреса параметров. Они могут быть временными массивами.
Память надо выделять самостоятельно и копировать строки.
они как раз копируются перед SetData
Спасибо)
0
zss
Модератор
Эксперт С++
6570 / 6132 / 2021
Регистрация: 18.12.2011
Сообщений: 15,983
Завершенные тесты: 1
21.11.2016, 12:49 #5
Цитата Сообщение от ChipChop Посмотреть сообщение
они как раз копируются перед SetData
Это не спасет, если копирование выполняется в локальные переменные.
Поэтому, такие функции неприемлемы!
0
21.11.2016, 12:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2016, 12:49
Привет! Вот еще темы с ответами:

Работа со структурами - C++
1. Надо обьявить тип структура с полями базовых типов, указателей и массивов 2. Создать и инициализировать переменную типа структура ...

Работа со структурами - C++
определить структуры, описывающие шар и точку в трехмерном пространстве. написать функции ввода и вывода данных и функции проверки,...

Работа с структурами - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; struct struc{ char* a; int x; }

Работа со структурами - C++
Известны данные о численности населения и площади 10 государств. Определить государство с максимальной плотностью населения. P.S. ...


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

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

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