Что вы спрашиваете: возможно ли создать массив такого размера, который неизвестен во время компиляции, но только во время выполнения? Да, вы можете, но выбранный вами способ не является стандартным C ++: объявление массива, например
struct node *arr[numOfLanding];
означает использование " массива переменной длины ", который не является (и никогда не был) частью стандарта C ++. Это было частью C, однако, в C99, но затем комитет решил сделать его необязательным в C11. В любом случае можно найти компилятор C ++, который поддерживает эту функцию как расширение: например, gcc. Но если вы используете его, имейте в виду, что ваш код не является переносимым.
Стандартный способ сделать это в C ++ - использовать new[]
:
node* arr = new node[numOfLanding];
(обратите внимание, что использование ключевого слова struct
- это то, что вы делаете в C; в C ++ это не требуется)
На этом этапе вы получаете доступ к каждому элементу, используя .
, а не ->
:
arr[i].hour=hour;
arr[i].minutes=minutes;
После того, как вы закончили использовать массив, вы должны удалить его, используя:
delete[] arr;
Во всяком случае, этот стиль старый и в наши дни считается плохим. Предпочтительным подходом является использование контейнера, который автоматически определяет размер для вас, и который будет управлять памятью, так что вам не нужно беспокоиться о new[]
и delete[]
. Лучшим контейнером для этого является std :: vector . Чтобы использовать его, сначала вам нужно #include <vector>
, а затем вы можете использовать его так:
std::vector<node> arr(numOfLanding);
for (auto& curr_node : arr) {
cin>>hour;
cin>>minutes;
curr_node.hour=hour;
curr_node.minutes=minutes;
}