Prosim lepo. Hvala!
C++ In Vektor
#2
Objavljeno 16 april 2012 - 22:42
Vektorji so polja(array) z dodatno možnostjo spreminjanja velikosti.
Bolj po kmečko verjetno ne bo šlo.
Skratka, dokaj neuporabna zadeva(če mene kdo kaj vpraša), čeprav si misliš da če lahko polje inicializiraš majhno in po potrebi kasneje povečaš da prihraniš kaj na spominu, nak. Na žalost zasedejo več spomina kot navadna polja. Plus tega pa "resize" samega vektorja je kar požrešen, tako da če ne gre za razliko med 5 elementi in kasneje možnimi 5miljonov elementov, se verjetno ne splača uporabiti vektorja.
#3
Objavljeno 17 april 2012 - 11:27
To zgleda tako:
Skladisce skladisce;
skladisce.dodaj(BLABLA);
Sedaj pa ne vem, če je pravilno tako, ker smo do sedaj imeli vse naloge z razredi, kjer si napisal konstruktor in priredil vrednosti spremenljivkam v razredu ampak tokrat ne vem, kakšne vrednosti bi priredil vektorju.
#7
Objavljeno 17 april 2012 - 19:37
Kako v metodah ( Skladišče) ti sploh vstaviš nek objekt not-> če vstavljam število je ta zadeva enostavna ... torej bi metoda dodaj zgledala takole..
void Skladisce::dodaj(int stevilo)
{
lista.push_back(stevilo );
}
sedaj me pa zanima kako vstaviti nek objekt, ki je iz razreda Datum, ali pa tudi iz razreda Oseba ?? Jaz sem se loto tega tako, da sem dodal instančno spremenljivko Datum datum.
torej sedaj razred Skladišče zgleda takole:
class Skladisce
{
private:
vector<Datum> lista;
Datum datum;
public:
// neke metode
};
in metoda dodaj potem takole:
void Skladisce::dodaj(Datum datum)
{
lista.push_back(datum);
}
nisem ravno prepričan da je to pravilna rešitev.... kajti sedaj v razredu Skladisce uporabljam vsebovanje... iz razreda Datum..
Prosim za pomoč. Hvala v naprej!
#8
Objavljeno 17 april 2012 - 20:13
void dodaj(Datum d){
datumi.push_back(d);
}
void brisiX(int i){
datumi.erase(datumi.begin()+i);
}
Datum getX(int i){
return datumi.at(i);
}
int size(){
return datumi.size();
}
vector<Datum> vrniSode()
{
vector<Datum> temp;
for(unsigned int i=0;i < datumi.size(); i+=2)
temp.push_back(datumi.at(i));
return temp;
}
~Skladisce()
{
datumi.clear();
}
@kevinn: tiste spremenljivke datum ne rabis
#13
Objavljeno 18 april 2012 - 17:19
vector<Datum> Skladisce::vrniSode()
{
vector<Datum> nova_lista;
for(int e=0();e<lista.size();e++)
{
if(e%2==0)
{
nova_lista.push_back(lista.at(e));
}
}
return nova_lista;
}
Imam pa težavo, ko hočem v glavnem delu programa izpisat vrnjen vektor, prevajalnik mi ob pregledu ne javi nobene napake... vendar ko se program zažene mi izpiše
Vaja0801.exe has triggered a breakpoint.
Tako izpisujem vektor v glavnem delu programa:
vector<Datum>::iterator j;
for(j=b->vrniSode().begin();j<b->vrniSode().end();j++)
{
j->print();
cout<<endl;
}
Morda ima kdo kakšno idejo zakaj pride do te napake??
#14
Objavljeno 18 april 2012 - 17:50
rezultat metode vrniSode sem priredil novemu vektorju, ki sem ga ustvaril v glavnem programu. Nato sem si napisal metodo za izpis vektorja, ki kot argument sprejme vektor.
Še koda:
cout << "Testiranje metode vrniSode" << endl; sklad.dodaj(os1);//znova dodam osebo sklad.dodaj(os2);//znova dodam osebo sklad.dodaj(os3);//znova dodam osebo sklad.dodaj(os4);//znova dodam osebo cout << "TRENUTNI VEKTOR:" << endl; sklad.izpisiVector(); cout << "VEKTOR Z SODIMI ELEMENTI: " << endl; vector<Oseba> temp = sklad.vrniSode(); sklad.izpisiVector(temp);
Ter metoda za izpis vektorja:
void izpisiVector(vector<Oseba> vektor)
{
for(unsigned int i = 0; i < vektor.size(); i++)
{
cout << vektor.at(i).getIme() << " ";
cout << vektor.at(i).getPriimek() << endl;
}
}
#17
Objavljeno 18 april 2012 - 19:19
Ce je treba vrnit soda mesta, zakaj bi preverjal i%2==0 ?? ce pa lahko enostavno za 2 povecujes stevec
Verjamem, da dela tudi tako. V bistvu je vseeno, ali pač? Ampak če delaš tako, potem ne smeš vrnit čisto prvega elementa, 0 ni sodo število.
Hvala MaTTo... sem v glavnem programu prekopiral vrnjen vektor v novega, ter ga enako izpišem in zadeva dela
Ni problema.
#18
Objavljeno 18 april 2012 - 19:28
ce mas tako: for(int i=0; i < size; i++) if(i%2==0)...
bo enako 0,2,4,6
+nepotrebna ponavljanja in primerjanja bojo
ce bi hotel od 2 naprej, pa das i na zacetki na 2 -> for(int i=2; i < size; i+=2)
pa v besedilu naloge pise 0,2,4... (sej mamo isto besedilo?)
#19
Objavljeno 18 april 2012 - 21:07
Da malo zakompliciram
ce mas tako: for(int i=0; i < size; i++) if(i%2==0)...
bo enako 0,2,4,6( 0 / 2 = 0, ostanek 0)
+nepotrebna ponavljanja in primerjanja bojo
ce bi hotel od 2 naprej, pa das i na zacetki na 2 -> for(int i=2; i < size; i+=2)
pa v besedilu naloge pise 0,2,4... (sej mamo isto besedilo?)
No ja, v bistvu res piše 0, 2, 4... Sploh nisem opazil
Dodaj odgovor
0 član(ov) bere to temo
0 članov, 0 gostov, 0 anonimnih uporabnikov











