"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

C++ STL: Pair in List verpacken

alexsb 01.04.2004 - 21:59 1176 6
Posts

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
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

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Nix new !

equivalents.push_back(make_pair(left, right))

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
super, danke

xdfk

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
Zitat von alexsb
super, danke

ist net heute 23:59 abgabeschluss? ;)

alexsb

hmm
Avatar
Registered: Jun 2001
Location: near Graz
Posts: 1566
ja ;)

bin schon zu mittag fertig worden ;)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz