C++ STL: Pair in List verpacken

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_stl_pair_in_list_verpacken_110949/page_1 - zur Vollversion wechseln!


alexsb schrieb am 01.04.2004 um 21:59

Hi,
ich möchte In einer Liste Paare von Zahlenwerten speichern. Dazu habe ich ein Liste angelegt, in die ich dann zuweisen möchte.

Code:
double left = 0.0;
double right = 0,0;
list<pair<double, double> > equivalents;
// [...]
// so möchte ich dann gerne etwas zuweisen, hier gibts aber den compiler Fehler
equivalents.push_back(new pair<double, double>(left, right));

Der g++ meint dazu:
Zitat
restoration.cpp: In member function `void Restoration::regionLabeling(Mat3d*,
int)':
restoration.cpp:416: error: no matching function for call to `
std::list<std::pair<double, double>, std::allocator<std::pair<double,
double> > >::push_back(std::pair<double, double>*)'
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include/g++-v3/bits/stl_list.h:746: error: candidates
are: void std::list<_Tp, _Alloc>::push_back(const _Tp&;) [with _Tp =
std::pair<double, double>, _Alloc = std::allocator<std::pair<double, double>
>]
restoration.cpp:324: warning: unused parameter `int t3'
make[1]: *** [restoration.o] Error 1
make[1]: Leaving directory `/home/alexsb/Uni/SS04/VIS/students/2004/bacgvis/bacgvis23/ba/task1'
make: *** [all] Error 2

Die art der Zuweisung habe ich von http://sgi.com/tech/stl/pair.html

Ich bin leider noch nicht so erfahren mit der STL und hab auch schon ewig nicht mehr c++ programmiert.
Was mach ich da falsch? Danke!


Ringding schrieb am 01.04.2004 um 22:00

Nix new !

equivalents.push_back(make_pair(left, right))


alexsb schrieb am 01.04.2004 um 22:04

oag, geht :) danke
Kannst mir auch eventuell erklären wie das jetzt vom speicher aufräumen usw funktioniert, und warum da kein new gehört. Wie man sich ja denken kann (liste) passiert das ganze öfter :)


Ringding schrieb am 01.04.2004 um 22:08

Grundregel: Solange du nicht new aufrufst, brauchst du auch kein delete (bzw. auto_ptr). Das Aufräumen wird vom Destructor der STL Container automatisch gemacht.

Ist vielleicht am Anfang ein bisschen schwer zu überschauen, aber man gewöhnt sich daran.

Du brauchst deshalb kein new, weil STL Container die Objekte selber und nicht Pointer darauf enthalten, wie bei Java. Das Objekt wird mit make_pair erzeugt und dann in die Liste hineinkopiert (wobei's da irgendeine Optimierung gibt, damit diese Kopiererei nicht tatsächlich stattfinden muss)


alexsb schrieb am 04.04.2004 um 22:28

super, danke


xdfk schrieb am 04.04.2004 um 23:01

Zitat von alexsb
super, danke

ist net heute 23:59 abgabeschluss? ;)


alexsb schrieb am 04.04.2004 um 23:12

ja ;)

bin schon zu mittag fertig worden ;)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026