Problem sa konstantama i nizovima

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

Hvala unapred!

int arn[n] je problem.

Ako ti je poznato maksimalno N, mozes da iskoristis taj broj umesto promenljive n. Recimo int arn[1000]

Inace, moras da koristis dinamicku alokaciju memorije.

1 Like

Definisi arn kao pokazivac i posle mu daj velicinu.
#include
using namespace std;
int *arn;
int main()
{
int n; cin >> n;
arn=new int[n];
return 0;
}

1 Like

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?

Nema razlike u koriscenju.
Sa arn[i] pristupas i-tom clanu niza kao i obicno.
Jos jedan nacin je da koristis vector umesto niza.

Na linku mozes pogledati kako se vector koristi.
http://www.cplusplus.com/reference/vector/vector/

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.