Вопрос по arrays, c++ – Как определить размер массива члена во время выполнения
Допустим, у меня есть класс, в котором есть член, который является массивом. Можно ли определить его размер при строительстве / во время выполнения следующим образом:
<code>class myClass { private: int myArray[n] public: myClass(); someOtherMethod(); }; </code>
Где n - это переменная, которая определяется на основе пользовательского ввода. Если нет, то какой будет лучшая альтернатива?
Семантически существует 3 типа массивов:
arrays with a size fixed at compile time arrays with a size fixed at runtime arrays with a dynamic sizeC ++ напрямую поддерживает первый и третий случаи, соответственно с регулярными массивами иstd::vector
учебный класс.
C также поддерживает второй тип с двумя конструкциями:
variable length arrays (on the stack) the oldie struct hack or tail-paddingЯ бы посоветовал в C ++, используяstd::vector
класс в твоем случае. Он предоставляет больше, чем вам нужно, но проще в использовании.
С другой стороны, вы все еще можете использовать дополнение к хвосту, даже в C ++. Это требует тщательной разработки, хотя.
class myClass {
private:
std::vector<int> myArray;
public:
myClass();
someOtherMethod();
};
myClass::myClass (int size)
: myArray (size)
{
...
}
Затем вы можете заполнить вектор как массив. В качестве альтернативы, как указывает Наваз, используйтеreserve()
, который резервирует место для новых элементов и / илиpush_back()
, который добавляет элементы на спину, по одному за раз.