У меня есть класс, который должен хранить массив с переменным размером. В идеале этот размер будет определяться как параметр, предоставляемый конструктору класса.Как инициализировать массив переменных размера в классе C++?
можно определить константу, а затем работать с этим, как показано ниже:
#include <iostream>
#define ARRSIZE 5
class Classy{
private:
int myarray[ARRSIZE];
public:
Classy();
void printarray();
};
Classy::Classy(){
for(int i = 0; i < ARRSIZE; i++){
myarray[i] = i * i * 2;
}
}
void Classy::printarray(){
for(int i = 0; i < ARRSIZE; i++){
std::cout << myarray[i] << std::endl;
}
}
Однако, я хотел бы сделать это следующим образом:
#include <iostream>
class Classy{
private:
int arraysize;
int myarray[arraysize];
public:
Classy(int parraysize);
void printarray();
};
Classy::Classy(int parraysize){
arraysize = parraysize;
for(int i = 0; i < arraysize; i++){
myarray[i] = i * i * 2;
}
}
void Classy::printarray(){
for(int i = 0; i < arraysize; i++){
std::cout << myarray[i] << std::endl;
}
}
Компилятор действительно Безразлично» Мне нравится мой подход, поэтому я ищу альтернативный способ делать вещи.
Я сделал некоторые поисковые запросы по этому вопросу, но мои поиски не принесли результатов. Я нашел this подход, который использует динамическое распределение памяти. Этого я бы хотел избежать, поэтому я ищу решение, которое не полагается на это. Может быть (и я начинаю думать), что это единственное изящное решение моей проблемы (и если это так, вопрос, конечно, должен быть закрыт как дубликат).
Используйте ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). –
Я не большой поклонник массивов в целом, для большинства целей.Если вы действительно не нуждаетесь в них для некоторой воспринимаемой оптимизации, 'std :: vector' является вашим другом и, скорее всего, сгибается с вашими требованиями. Но вы можете использовать [std :: array] (http://en.cppreference.com/w/cpp/container/array) ... удобную альтернативу C++ для C-массивов. – HostileFork
@HostileFork: 'std :: array' не является переменным размером. 'std :: unique_ptr' является стандартным компонентом для массива с размером, заданным при построении. 'std :: vector ' для массива, размер которого может меняться в течение всего срока его службы. –