---
title: "ta bort ur vektor"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/79189-ta-bort-ur-vektor"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Mc Fetto"
published: "2003-06-08T10:11:14.000Z"
updated: "2003-06-08T23:52:59.000Z"
replies: 9
views: 438
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/79189-ta-bort-ur-vektor"
---

# ta bort ur vektor

## #1 — Mc Fetto, 2003-06-08T10:11Z

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!

Permalänk: https://www.webforum.nu/p/79189

## #2 — aasah, 2003-06-08T16:36Z

Vad är vektor för typ? Är det en array eller använder du STL-klassen Vector?

Permalänk: https://www.webforum.nu/p/1076191

## #3 — Mc Fetto, 2003-06-08T16:45Z

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!!

Permalänk: https://www.webforum.nu/p/1076195

## #4 — Beatbox, 2003-06-08T17:21Z

Använd en iterator istället. Då kan du skriva :

```
while (itr != vektor.end())
{
   if ((*itr).getObjId()!=oid)
   {
       vektor.erase(itr);
       break;
   }
   itr++
}
```

Permalänk: https://www.webforum.nu/p/1076220

## #5 — Mc Fetto, 2003-06-08T17:37Z

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å?

Permalänk: https://www.webforum.nu/p/1076228

## #6 — PeW, 2003-06-08T19:37Z

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

Permalänk: https://www.webforum.nu/p/1076278

## #7 — Mc Fetto, 2003-06-08T19:45Z

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

Permalänk: https://www.webforum.nu/p/1076282

## #8 — Mc Fetto, 2003-06-08T19:52Z

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!!

Permalänk: https://www.webforum.nu/p/1076287

## #9 — PeW, 2003-06-08T20:33Z

```
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;
}
```

Permalänk: https://www.webforum.nu/p/1076318

## #10 — Mc Fetto, 2003-06-08T23:52Z

Tnx alot :)

Permalänk: https://www.webforum.nu/p/1076445

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/79189-ta-bort-ur-vektor
