C++ vektor se sam postavi na nulu

Predspotavljam da ima ovdje i onih koji znaju programirati u c+ imam sljedeci problem
trebam za zadacu da napravim nenku funkciju i sada nebitno o cemu se radi u zadatku ali moj problem je sljedeci
trebam neke brojeve da pridruzim vektoru koji ce funkcija vracati
i imam uslov kada se to desava sada izgleda odprilike ovako
if (toto)
{
vektor=neka vrijednost}
eh i kada unutar ove 2 zagrade stavim da mi ispise vektor dobro je medjutim
zim izadje iz ove zagrade odmah postavi sve vrijednosti na 0
ito nije samo za tu if petlju nego u bilo kojoij da stavim do cega bi to moglo biti?

funkcija jel? pa kad saljes vrijednost funkciji ona tu vrijednost pridruzuje nekoj novoj varijabli koja nema veze sa glavnom funkcijom i koja se inicijalizira pri pozivu funkcije i uklanja se kada funkcija zavrsi svoj posao. znaci ta vrijednost koju pridruzis izgubi se kada izadjes iz te funkcije jer se ta varijabla brise iz memorije. varijabla vektor koju deklariras u funkciji i koju deklariras u glavnoj funkciji nisu uopce iste. mozes uraditi sljedece:

  1. napraviti globalnu varijablu(ne znam da li se radi o polju) koja se nalazi ispod #include statementa i ispred main-a i ona ce biti vidljiva u citavom programu
  2. u mainu deklarirati varijablu kao pokazivac ili poslati njezinu adresu funkciji pri cemu bi funkcija primala pokazivac (ne znam da li sam ovo dobro srocio)
  3. napraviti funkciju koja vraca vrijednost, a u mainu vracenu vrijednost pridruziti varijabli ili ispisati sa cout<<funkcija(neka varijabla ili vrijednost).
    toliko ti mogu reci sa informacijama koje si mi ponudio

dobro ev da objasnim znadci treba unijeti broj n koji se daje funkciji integer, i funkcija napravi vektor sa brojevima od 1 do n koji su djeljivi sa sumom svojih cifara i da vrati taj vektor
ev kako sam napisao
vector funkcija(int n){
vectorbrojevi;
int i;
for (i=1;i<=n;i++){
int s(0);
int k=sizeof(brojevi);
int g=i,p;
while (g>0){
s+=g%10;
g/=10;
}

if(i%s==0){
k+=1;
brojevi.resize(k);
p=i;
}
brojevi[k]=p;
cout<<p<<brojevi[k]<<endl;
}
cout<<brojevi[0];
return brojevi;
kao sto se vidi pokusao sam cak unjeti novu varijablu p i njoij dati tu vrijednost jer sam ustanovio da ona ne mijenja vrijednost kada izadjem iz zagrade ali opet nista

ja gledam u ovo i vidim nered. deklaracije varijabli u for petlji. p varijabla ti bas i ne treba. ne znam kako se ponasa uopce tip podatka vector. jel itko radio sa ovim?

deklariso sam te varijable tu jer mi ne trebaju nijgdje osim u petlji toj
ps: ne treba mi p ovo samj a malo experimentisao da vidim kako ce raditi ako to uradim zato mi sada ovako izgleda

[quote=reni90]dobro ev da objasnim znadci treba unijeti broj n koji se daje funkciji integer, i funkcija napravi vektor sa brojevima od 1 do n koji su djeljivi sa sumom svojih cifara i da vrati taj vektor
ev kako sam napisao
vector funkcija(int n){
vectorbrojevi;
int i;
for (i=1;i<=n;i++){
int s(0);
int k=sizeof(brojevi);
int g=i,p;
while (g>0){
s+=g%10;
g/=10;
}

if(i%s==0){
k+=1;
brojevi.resize(k);
p=i;
}
brojevi[k]=p;
cout<<p<<brojevi[k]<<endl;
}
cout<<brojevi[0];
return brojevi;
kao sto se vidi pokusao sam cak unjeti novu varijablu p i njoij dati tu vrijednost jer sam ustanovio da ona ne mijenja vrijednost kada izadjem iz zagrade ali opet nista[/quote]
pa kako ce radit kad si pogresno napiso code. kako ocekujes da ti cout<<brojevi[0] radi kad to pozivas izvan funkcije u kojoj si deklariso? i taj return nema sanse da radi. onda sta treba ovo znacit “int g=i,p;” ?

ev skontao sam greska je bila u tome sto sam velicinu vektora pokusao da dobijem preko ziseof umjesto sa brojevi.size()

nije for petlja funkcija da mozes deklarirat u njoj varijable pa da to radi kako treba. svaki put kad se petlja okrene iznova deklarira varijable. moze prouzrocit segfault, memory leak, ko zna sta svasta. ovisi o kompajleru. @maher_ nije mu cout<<brojevi[0] izvan funkcije nego nije zatvorio bracket na kraju. kod mi ne izgleda elegantno nimalo. al et ako tebi radi onda…

tako je pastiro code nisam mu ja kriv :slight_smile: osim toga imas pravo za deklarisanje funkcija u funkciji “int s(0)” , ili varijabli u for petlji itd …

ne razumijem deklaraciju int s(0). kompajler ne dojavi gresku, sve normalno prodje. to je koliko vidim najobicnija integer varijabla.

Pa ako obratite pažnju na neka stilska pravila pri radu sa C++om (za razliku od C-a) preporučljivo je varijable deklarisati tamo gdje se koriste a ne na početku funkcije, takođe je preporučena inicijalizacija oblika int k(0) umjesto int k=0 jer se (u slučaju da je u pitanju klasa a ne ugrađeni tip) na prvi način poziva konstruktor, a na drugi operator dodjele što su dvije različite stvari.

A kao što reče reni, jedina prava greška gore je korištenje sizeof, mada bi kod bio puno jednostavniji da je koristio metod push_back.