Я хочу, чтобы количество объектов, создаваемых моей программой, контролировалось пользователем. Каковы различные способы сделать это и когда я должен выбрать один подход вместо другого?
#include<iostream>
using namespace std;
class
{
public :
int FullName;
int RollNumber;
in
{
public :
int FullName;
int RollNumber;
int age;
int marks;
}
voidt age;
int marks;
};
void main()
{
int n;
cout << "How many Students record you want :\t ";
cin >>n;
Data Student[n];
}
Вы ищете std::vector
.
Два основных подхода. Подсчитайте количество вещей, которые нужно прочитать, а затем прочитайте это количество. Или читайте что-то, пока не получите какой-то терминатор, который указывает, что «больше нет элементов для чтения».
Как было сказано ранее, используйте std :: vector.
Однако ваш пример, похоже, работает: https://onlinegdb.com/HyHjwZddQ
Это называется массив переменной длины (VLA) и не является частью стандартного C++. Это расширение компилятора. std::vector
является предпочтительнее.
Такие вещи, как Data Student[n];
, недопустимы для C++, потому что В C++ нет массивов переменной длины. Подобный код компилируется только из-за нестандартного расширения GCC. Вместо этого вы должны использовать std::vector
, чтобы сделать ваш код переносимым и избежать выброса стека.
Если количество элементов становится фиксированным в момент создания, лучшим вариантом будет
std::make_unique<Data[]>(n)
Но если вам может потребоваться изменить группу элементов позже (вставить или удалить), тогда
std::vector<Data>(n)
В чем преимущество использования массива напрямую (в куче) над std :: vector, который также использует кучу? В конце концов, у обоих одинаковая память. Если вам нужно вставить или удалить, я бы предпочел использовать список.
@FrederikDeRuyck: Ни одно из предложений не состоит в том, чтобы «использовать массив напрямую». Я предложил интеллектуальный указатель с меньшим количеством операций, когда их достаточно, и интеллектуальный указатель с большим количеством операций, когда они вам нужны. А эффективность локальности / кеширования означает, что связанный список обычно проигрывает непрерывному хранилищу даже при вставке и удалении.
вы уже считываете в
n
введенное значение, так в чем именно вы застряли?