Mc FettoMedlem sedan nov. 20022 355 inlägg JAg har följande while sats där jag vill ta bort ett objekt ut vektorn om det inte stämmer överens med ett vist attribut:
while (i<antal)
{
if (vektor[i].getObjId()!=oid)
{
vektor.erase(vektor.begin()+i);
antal--;
}
i++;
}
Men det verkar inte fungera riktigt... Är det ngn som ser ngt fel?
i tilldelas 0 innan satsen!
aasahMedlem sedan mars 20034 471 inlägg Vad är vektor för typ? Är det en array eller använder du STL-klassen Vector?
Mc FettoMedlem sedan nov. 20022 355 inlägg STL klassen vector använder jag!!
Tror det har ngt med när jag räknar ned antal så kanske den inte räknar hela vägen till slutet... kanske borde prova att räkna ut hur många man tar bort och efter while-satsen ta och räkna ned antal då istället!!
BeatboxMedlem sedan okt. 20013 217 inlägg Använd en iterator istället. Då kan du skriva :
while (itr != vektor.end())
{
if ((*itr).getObjId()!=oid)
{
vektor.erase(itr);
break;
}
itr++
}
Mc FettoMedlem sedan nov. 20022 355 inlägg Ja det kanske är bra, men då blir det fel när jag kör det och VS pekar på denna radden i min klass Bok:
int getObjId() { return LanObj::getObjId(); }
itr skapade jag så här:
vector<Bok>::iterator itr = vektor.begin();
Kanske var fel att skapa itr så?
PeWMedlem sedan juni 200010 432 inlägg Detta torde fungera bättre:
vector<Bok>::iterator itr,it;
for(it=NULL,itr=vektor.begin();itr<vektor.end();itr++)
if((*itr).getObjId()!=oid){
it = itr;
itr=vektor.end();
}
if(it)
vektor.erase(it);
Om det nu är första förekomsten av ett icke oid du vill ta bort.
red:
getObjId() skulle det vara
Mc FettoMedlem sedan nov. 20022 355 inlägg Har jag tolkat din kod fel? Jag får den till att om oid inte är lika med getObjektId så ges itr slutet på vektorn... Meningen med min sats är att den ska ta bort alla böcker som inte stämmer överens!
Möjligt att jag tolkat det helt tokfel ;)
red: läste inte ditt inlägg efter koden :r
Mc FettoMedlem sedan nov. 20022 355 inlägg Blev en aning bättre nu!
vector<Bok>::iterator itr,it;
for(it=NULL,itr=vektor.begin();itr<=vektor.end();itr++)
if((*itr).getObjId()!=oid){
it = itr;
vektor.erase(it);
}
Men där ligger fortfarande kvar två Böcker i vektorn... hajar inte riktigt vad det kan vara!
om jag vill ta bort alla utom objekt id 66, så ligger där fortfarande kvar en annan!!
PeWMedlem sedan juni 200010 432 inlägg vector<Bok>::iterator itr,it;
for(itr=vektor.begin(),it=itr;itr<vektor.end();itr++)
if((*itr).getObjId()!=oid){
it = itr;
vektor.erase(it);
itr = it-1;
}