Ich habe eine Klasse, die ein Array mit variabler Größe speichern muss. Idealerweise wird diese Größe als ein Parameter definiert, der dem Konstruktor der Klasse übergeben wird.Wie initialisiere ich ein Array variabler Größe in einer C++ - Klasse?
Ich kann eine Konstante definieren und dann mit dem arbeiten, wie unten zu sehen:
#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;
}
}
aber ich mag es, wie dies zu tun:
#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;
}
}
Der Compiler wirklich doesn‘ Aber ich mag meine Herangehensweise, also suche ich nach einer alternativen Art, Dinge zu tun.
Ich habe etwas über das Thema gegooglet, aber meine Suche ergab sich nicht fruchtbar. Ich fand this Ansatz, der es dynamische Speicherzuweisung verwendet. Dies möchte ich vermeiden, deshalb suche ich nach einer Lösung, die nicht darauf angewiesen ist. Es kann gut sein (und ich fange an zu denken), dass es die einzige elegante Lösung für mein Problem ist (und wenn das der Fall ist, sollte die Frage natürlich als Duplikat geschlossen werden).
Verwenden Sie ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). –
Ich bin kein großer Fan von Arrays im Allgemeinen, für die meisten Zwecke.Wenn du sie nicht wirklich für eine wahrgenommene Optimierung brauchst, ist 'std :: vector' dein Freund und neigt eher dazu, deine Anforderungen zu erfüllen. Aber Sie könnten [std :: array] (http://en.cppreference.com/w/cpp/container/array) ... die bequeme C++ - Alternative zu C-Arrays verwenden. – HostileFork
@HostileFork: Ein 'std :: array' hat keine variable Größe. 'std :: unique_ptr' ist die Standardkomponente für ein Array, dessen Größe bei der Konstruktion festgelegt wurde. 'std :: vector ' für ein Array, dessen Größe während seiner Lebensdauer variieren kann. –