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 

std::vector::pop_front()

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





PostPosted: Wed Feb 08, 2006 6:02 pm    Post subject: std::vector::pop_front() Reply with quote



Ich habe o. g. Methode folgendermassen ersetzt:

std::vector <long> lv(10,999);
lv.assign(++lv.begin(), lv.end()); //statt pop_front()

Es kompiliert und läuft auch einwandrei unter Linux, habe es auch mal
mit valgrind laufen lassen und keine Fehlermeldung bekommen.
Trotzdem bin ich unsicher, ob das so zulaessig ist oder nicht.

Habe aber leider unter www.sgi.com keine Dokumentation zur
assign-Methode gefunden.

chris

--
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
Raymond Haeb
Guest





PostPosted: Wed Feb 08, 2006 7:10 pm    Post subject: Re: std::vector::pop_front() Reply with quote



chris <cb@delta-h.de>:
Quote:
Ich habe o. g. Methode folgendermassen ersetzt:

std::vector <long> lv(10,999);
lv.assign(++lv.begin(), lv.end()); //statt pop_front()

Es kompiliert und läuft auch einwandrei unter Linux, habe es auch mal
mit valgrind laufen lassen und keine Fehlermeldung bekommen.
Trotzdem bin ich unsicher, ob das so zulaessig ist oder nicht.

Du solltest zumindest noch ein if(!lv.empty()) davor schreiben.

Quote:
Habe aber leider unter www.sgi.com keine Dokumentation zur
assign-Methode gefunden.

Wie kannst Du Funktionen nutzen die Du nicht kennst?
Eine Alternative ist zb:

std::remove(lv.begin(),++lv.begin());


Raymond

--
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
Falk Tannhäuser
Guest





PostPosted: Wed Feb 08, 2006 7:10 pm    Post subject: Re: std::vector::pop_front() Reply with quote



chris wrote:
Quote:
Ich habe o. g. Methode folgendermassen ersetzt:

std::vector <long> lv(10,999);
lv.assign(++lv.begin(), lv.end()); //statt pop_front()

Es kompiliert und läuft auch einwandrei unter Linux, habe es auch mal
mit valgrind laufen lassen und keine Fehlermeldung bekommen.
Trotzdem bin ich unsicher, ob das so zulaessig ist oder nicht.

Laut § 23.2.4.1/2 ist das fragliche assign() äquivalent zu
erase(begin(), end()); gefolgt von insert(first, last);
wobei in deinem Fall first und last durch das erase()
ungültig gemacht wurden - also Nicht Definiertes Verhalten
(d.h. typischerweise, dass es bei deinen Tests läuft, aber
dem Kunden um die Ohren fliegt...).

Abhilfe:
lv.erase(lv.begin());
Man muss bloss im Hinterkopf behalten, dass hierbei alle
hinter dem gelöschten Element stehenden Elemente um eins
nach vorne verschoben werden, was bei größeren Datenmengen
langsam ist. Vgl. § 23.2.4.3/3-4. Aus diesem Grunde hat
std::vector auch von Haus aus kein pop_front() und push_front().

MfG
Falk

--
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
Thomas Jakob
Guest





PostPosted: Wed Feb 08, 2006 7:10 pm    Post subject: Re: std::vector::pop_front() Reply with quote

chris wrote:
Quote:
Ich habe o. g. Methode folgendermassen ersetzt:

std::vector <long> lv(10,999);
lv.assign(++lv.begin(), lv.end()); //statt pop_front()

Es kompiliert und läuft auch einwandrei unter Linux, habe es auch mal
mit valgrind laufen lassen und keine Fehlermeldung bekommen.
Trotzdem bin ich unsicher, ob das so zulaessig ist oder nicht.

Habe aber leider unter www.sgi.com keine Dokumentation zur
assign-Methode gefunden.

chris


Wie wärs einfach mit folgendem:

lv.erase(lv.begin());

Dafür ist std::vector aber im Allgemeinen nicht gedacht. Nimm doch deque
oder list.
--
Greetings, Thomas Jakob
quicix (at) gmail (dot) com

--
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
chris
Guest





PostPosted: Wed Feb 08, 2006 9:10 pm    Post subject: Re: std::vector::pop_front() Reply with quote

Quote:
Wie kannst Du Funktionen nutzen die Du nicht kennst?

Scott Meyers "Effective STL", eines der ersten Themen handelt über
assign.

--
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
chris
Guest





PostPosted: Wed Feb 08, 2006 9:10 pm    Post subject: Re: std::vector::pop_front() Reply with quote

Quote:
lv.erase(lv.begin());

Ja, so werde ich es machen!
Manchmal sieht man den Wald vor lauter Bäumen nicht.

Das vector nicht dafür geeignet ist, ist mir bewusst. Er hat aber den
Vorteil, dass man ihn an C-Funktionen übergeben kann, was in meinem
Fall interessant ist.
Ausserdem ist es keine Performance-relevante Stelle in meinem Code.

Vielen Dank!
chris

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