Как определить размер массива при создании класса?

Я хочу создать массив, содержащийся внутри класса. Массив будет иметь фиксированный размер, но я не знаю этот фиксированный размер до конструктора класса.

Допустим, пользователи создают что-то вроде: Fibanocci f(value1, value2, size), size Затем аргумент будет использоваться для определения количества элементов в содержащем массиве, которое будет фиксироваться в течение всей жизни Fibanocci пример.

Как мне это осуществить?

4 ответа

Идти с std::vector<type> vector вместо этого и вы можете сделать int size = vector.size(), Вы можете инициализировать размер вектора в конструкторе. Например,

// MyClass.hpp
class MyClass
{
public:
    MyClass();

    // Say I know this vector is going to have 5 elements
    std::vector<double> myVector; 
}

// MyClass.cpp
MyClass::MyClass() : myVector(5)
{
    int vectorSize = myVector.size(); //vectorSize = 5
}

Это невозможно, так как C/C++ требует, чтобы все классы имели константу sizeof, Единственный выход - использовать выделение кучи (new или же std::vector как предложено @jlack или что-то еще)

Размер массива должен быть известен во время компиляции!! Не думайте, что при использовании вектора вы потеряете производительность, это обертка над массивом. Если вы действительно строги и имеете C++11, вы можете использовать массив из стандартной библиотеки.

Я использую изменение размера или резервирование?

Резерв выделит память, но не вставит ничего. Resize вставит копии созданных по умолчанию объектов, если вы не укажете параметр.

Java делает массив динамическим, он назначает размер во время выполнения. Прокси-класс сформируется, чьим объектом является этот массив.

int a[]=new int[10];
Другие вопросы по тегам