Неопределенное количество переменных в структуре - PullRequest
0 голосов
/ 12 апреля 2020

Я пишу простую программу с использованием структур. Предполагается, что структура, с которой у меня есть проблема, должна быть гибкой, когда речь идет о количестве переменных в определении указанной структуры. Программа должна загрузить номер из файла с расширением .txt:

ints: 5
strings: 6

, а затем создать определенное количество целых и строк в структуре. Сначала я думал об использовании указателей в структуре:

struct Data
{
      int* intArr;
      string* stringArr;
};

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

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

void* можно преобразовать в любой тип данных, вы можете сделать void *var = new char и допустимо, но void не имеет размера, поэтому бесполезно выделять разные типы вместе, потому что вам нужно знать тип чтобы разыменовать указатель (и / или длину для его итерации), но вы не знаете его, если только вы не отслеживаете все типы, но, как вы можете предположить, это действительно неэффективно.

Если вы хотите выделить память для разных типов данных, сделайте это правильно, то есть указатель для каждого типа:

int * foo;
foo = new int[N];
char * bar;
bar = new bar[N];

Что касается неэффективности, имейте в виду, что вы есть два способа, рассчитать наихудший сценарий и зарезервировать память во время компиляции (т.е. char charArray[50]; int intArray[200]), или использовать new / delete для выделения памяти на основе требований времени выполнения (что и будет делать stl под капотом, если только вы используете std::array)

0 голосов
/ 12 апреля 2020

Я не правильно понял вашу проблему, но то, что вы упомянули, похоже, вы хотите связать переменное количество информации со структурой.

Использование двойного указателя в качестве переменной в структуре для выделения адреса массива или указателей. Это должно решить вашу проблему с переменным числом членов.

    struct X
    {
    int **ptr;
    };

    X a;
    a.ptr = malloc(sizeof(int*)*10); 

Это должно создать 10 указателей и распределить адрес созданного указателя на переменную члена структуры. Это значение 10 может изменяться во время выполнения.

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