C++ STL: Pair in List verpacken
alexsb 01.04.2004 - 21:59 1176 6
alexsb
hmm
|
Hi, ich möchte In einer Liste Paare von Zahlenwerten speichern. Dazu habe ich ein Liste angelegt, in die ich dann zuweisen möchte. 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: restoration.cpp: In member function `void Restoration::regionLabeling(Mat3d*, int)': restoration.cpp:416: error: no matching function for call to ` std::list<std:air<double, double>, std::allocator<std:air<double, double> > >:ush_back(std:air<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>:ush_back(const _Tp& [with _Tp = std:air<double, double>, _Alloc = std::allocator<std:air<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.htmlIch 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
Pilot
|
Nix new !
equivalents.push_back(make_pair(left, right))
|
alexsb
hmm
|
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
Pilot
|
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
hmm
|
super, danke
|
xdfk
pädagogisch wertvoll
|
super, danke ist net heute 23:59 abgabeschluss?
|
alexsb
hmm
|
ja bin schon zu mittag fertig worden
|