C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

vector<int>, n. Element löschen?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Torsten Mohr
Guest





PostPosted: Thu Mar 02, 2006 5:48 am    Post subject: vector<int>, n. Element löschen? Reply with 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?


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





PostPosted: Thu Mar 02, 2006 9:06 am    Post subject: Re: vector<int>, n. Element löschen? Reply with quote



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





PostPosted: Thu Mar 02, 2006 11:06 pm    Post subject: Re: vector<int>, n. Element löschen? Reply with quote



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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.