Mam klasy, która musi przechowywać tablicę o zmiennej wielkości. Idealnie, rozmiar ten byłby zdefiniowany jako parametr nadany konstruktorowi klasy.Jak zainicjować tablicę o zmiennych rozmiarach w klasie C++?
mogę określić stałą, a następnie pracować z tym, co widać poniżej:
#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;
}
}
jednak chciałbym to zrobić tak:
#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;
}
}
Kompilator naprawdę robi” Jednak podoba mi się moje podejście, więc szukam alternatywnego sposobu robienia rzeczy.
Zrobiłem trochę googlowania na ten temat, ale moje poszukiwania nie przyniosły rezultatu. Znalazłem podejście this, które robi to za pomocą dynamicznego przydzielania pamięci. Jest to coś, czego chciałbym uniknąć, więc szukam rozwiązania, które nie polega na tym. Może być (i zaczynam myśleć), że jest to jedyne eleganckie rozwiązanie mojego problemu (a jeśli tak jest, pytanie powinno oczywiście zostać zamknięte jako duplikat).
Użyj ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). –
Nie jestem wielkim fanem tablic w ogóle, do większości celów.O ile naprawdę ich nie potrzebujesz, aby uzyskać jakąś postrzeganą optymalizację, 'std :: vector' jest twoim przyjacielem, a bardziej prawdopodobne, że ugnie się wraz z twoimi wymaganiami. Ale możesz użyć [std :: array] (http://en.cppreference.com/w/cpp/container/array) ... wygodnej alternatywie C++ do C tablic. – HostileFork
@HostileFork: 'Std :: array' nie jest zmiennym rozmiarem. 'std :: unique_ptr' jest komponentem standardowym dla tablicy z ustawionym rozmiarem na budowie. 'std :: vector ' dla tablicy, której rozmiar może się zmieniać podczas jej trwania. –