Как определить размер массива при создании класса?
Я хочу создать массив, содержащийся внутри класса. Массив будет иметь фиксированный размер, но я не знаю этот фиксированный размер до конструктора класса.
Допустим, пользователи создают что-то вроде: 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];