Вопрос по arrays, c++ – Как определить размер массива члена во время выполнения

3

Допустим, у меня есть класс, в котором есть член, который является массивом. Можно ли определить его размер при строительстве / во время выполнения следующим образом:

<code>class myClass {
    private:
        int myArray[n]
    public:
        myClass();
        someOtherMethod();
};
</code>

Где n - это переменная, которая определяется на основе пользовательского ввода. Если нет, то какой будет лучшая альтернатива?

Ваш Ответ

3   ответа
8

Семантически существует 3 типа массивов:

arrays with a size fixed at compile time arrays with a size fixed at runtime arrays with a dynamic size

C ++ напрямую поддерживает первый и третий случаи, соответственно с регулярными массивами иstd::vector учебный класс.

C также поддерживает второй тип с двумя конструкциями:

variable length arrays (on the stack) the oldie struct hack or tail-padding

Я бы посоветовал в C ++, используяstd::vector класс в твоем случае. Он предоставляет больше, чем вам нужно, но проще в использовании.

С другой стороны, вы все еще можете использовать дополнение к хвосту, даже в C ++. Это требует тщательной разработки, хотя.

3

class myClass {
    private:
        std::vector<int> myArray;
    public:
        myClass();
        someOtherMethod();
};

myClass::myClass (int size)
    : myArray (size)
{ 
    ...
}

Затем вы можете заполнить вектор как массив. В качестве альтернативы, как указывает Наваз, используйтеreserve(), который резервирует место для новых элементов и / илиpush_back(), который добавляет элементы на спину, по одному за раз.

Error: User Rate Limit Exceededresize()Error: User Rate Limit ExceededmyClass::myClass (int size) : myArray(size) {}Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Radical
Error: User Rate Limit Exceededresize().
Error: User Rate Limit Exceededresize()Error: User Rate Limit Exceededreserve()?
Error: User Rate Limit Exceeded
1

std::vector предназначен для этой цели.

class myClass {
    private:
        std::vector<int> myArray;
    public:
        myClass(int size);
        someOtherMethod();
};

myClass::myClass(int size) : myArray(size)
{
}

Похожие вопросы