Poceo sam da pravim program koji trazi sve proste brojeve u intervalu [1…n] ali svaki put kada compilujem program dobijem gresku da ne smem da koristim promenljive u nizu kao broj elemenata.
Napravio sam konstantu ali i dalje dobijam greske:
*Storage size of ‘arb’ isn’t constant;
*(warning) ISO C++ forbids variable length array ‘arn’ [-Wvla];
*(warning) ISO C++ forbids variable length array ‘arb’ [-Wvla];
Evo deo source-a:
int constinit(){
int n; cin >> n; return n;
}
int main(){
cout << "N: " << endl;
const int n = constinit();
int arn[n];
iota(arn, arn + n, 1);
static bool arb[n];
for(int i = 0; i < n; i++)
cout << arb[i];
return 0;
}
Takodje, static bool sam koristio da bi mi svi elementi bili 0 tj. false. Ako neko zna bolje i/ili brze resenje, bio bih mnogo zahvalan na odgovoru
Okej, hvala.
A da li ima neke razlike u korišćenju izmedju običnih nizova i ovih, i da li postoji neki optimalniji način da se napravi niz od istih vrednosti?
Znam kako se koriste vectori, ali mi je brzina jako bitna ovde pa sam se ipak odlučio za niz.
Cudno mi je što sam pre koristio niz na onaj način i nikada nisam dobijao greške, čak ni na zadacima za takmičenje
Variable-length arrays (iliti nizovi dužine n gde n nije konstanta) su specifičnost C-a, tj. C++ ih ne podržava. Ima na StackOverflow-u lepih objašnjenja. E sad da li je vector stvarno sporiji, u teoriji da, i to je nešto o čemu sam slušao više puta ali nisam nikad opazio neku značajnu razliku. Ako ti je već svejedno, niz[MAXN] je default rešenje, ali ako je iz nekog razloga zgodnije/kraće imati dinamički niz, a imaš vremena (i full feedback) ne vidim što ne probati prvo tako.