 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Torsten Mohr Guest
|
Posted: Thu Mar 02, 2006 5:48 am Post subject: vector<int>, n. Element löschen? |
|
|
Hallo,
ich möchte das n. Element in einem Vektor löschen, die Methode "at"
liefert mir aber eine "reference" zurück und das "erase" benötigt
einen "iterator".
Wie muß ich das denn casten?
Oder muß ich den iterator erst erzeugen, indem ich von begin()
aus n Schritte weiterzähle?
vector<int> intV(10);
int i;
for(i = 0; i < intV.size(); i++)
intV[i] = i;
// intV.erase((vector<int>::iterator)intV.at(5));
// intV.erase(intV.at(5));
for(i = 0; i < intV.size(); i++)
cout << intV[i] << ' ';
cout << endl;
Danke für Tips,
Torsten.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Daniel Albuschat Guest
|
Posted: Thu Mar 02, 2006 9:06 am Post subject: Re: vector<int>, n. Element löschen? |
|
|
Torsten Mohr wrote:
| Quote: | Hallo,
ich möchte das n. Element in einem Vektor löschen, die Methode "at"
liefert mir aber eine "reference" zurück und das "erase" benötigt
einen "iterator".
Wie muß ich das denn casten?
Oder muß ich den iterator erst erzeugen, indem ich von begin()
aus n Schritte weiterzähle?
|
Je nachdem, wie du das "weiterzählen" meinst:
Um einen Random Access Iterator (und vector bietet so einen)
auf den nten Eintrag zeigen zu lassen, machst du einfach:
v.begin()+n
Da sich Iteratoren wie Pointer verhalten und bei Pointern dank
Pointerarithmetik hier um n*sizeof(*iterator) statt um n
Bytes erhoeht wird, funktioniert das prima.
Allerdings laesst das Problem auf ein fehler in der Anwendung
des vector schliessen: Wie in den Beispielen iterierst du anscheinend
statt mit den dafuer vorgesehenen Iteratoren lieber mit dem Index
ueber den vector.
Statt
for(i = 0; i < intV.size(); i++)
cout << intV[i] << ' ';
solltest du lieber schreiben:
for(vector<int>::const_iterator i = intV.begin();
i != intV.end();
++i )
cout << *i << ' ';
Das const_ ist natuerlich optional, aber ich pflege es immer zu
benutzen, wenn ich den Inhalt nicht aendern moechte.
MfG,
Daniel Albuschat
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Torsten Mohr Guest
|
Posted: Thu Mar 02, 2006 11:06 pm Post subject: Re: vector<int>, n. Element löschen? |
|
|
Hallo,
| Quote: | Je nachdem, wie du das "weiterzählen" meinst:
Um einen Random Access Iterator (und vector bietet so einen)
auf den nten Eintrag zeigen zu lassen, machst du einfach:
v.begin()+n
.... |
| Quote: | solltest du lieber schreiben:
for(vector<int>::const_iterator i = intV.begin();
i != intV.end();
++i )
cout << *i << ' ';
Das const_ ist natuerlich optional, aber ich pflege es immer zu
benutzen, wenn ich den Inhalt nicht aendern moechte.
|
vielen Dank für die Tips. Das hilft mir sehr weiter. Ich werde
mein Programm entsprechend ändern.
Viele Grüße,
Torsten.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|