wie funktioniert operator==() bei std::vector ?
-
sry hab wohl blöd formuliert
ich meinte den std::vector<T>::operator==(), also den operator==() der aus der vector klasse stammt,
wie vergleicht er? geht er jedes element durch und vergleicht es oder vergleicht der operator nur die grösse von den vectoren ?
-
Der == Operator vergleicht normalerweise inhaltlich, also macht es wohl wenig Sinn, nur die Grösse zu vergleichen, oder?
-
hm
dereferenziert er, wenn er aus zeigern besteht,
also wenn man int* oder MyObject* in den vector hineintun,
vergleich er den inhalt der objecte oder die zeigeradressen ?
-
er sollte eigentlich nur die zeigeraddressen vergleichen, denn wenn 2 zeiger gleich sind, müssten eigentlich auch die zu den zeigern gehörigen objekten gleich sein
-
es seih den man hat misst gebaut
-
Hallo,
DEvent schrieb:
hm
dereferenziert er, wenn er aus zeigern besteht,
also wenn man int* oder MyObject* in den vector hineintun,
vergleich er den inhalt der objecte oder die zeigeradressen ?das kann man doch auch ganz leicht selber testen:
#include <iostream> #include <vector> using namespace std; int main() { vector<int*> a; vector<int*> b; int zahl1 = 20; int zahl2 = 21; int zahl3 = 21; a.push_back(&zahl1); a.push_back(&zahl2); b.push_back(&zahl1); b.push_back(&zahl3); if(a == b) cout << "gleich" << endl; }
-
otze schrieb:
er sollte eigentlich nur die zeigeraddressen vergleichen, denn wenn 2 zeiger gleich sind, müssten eigentlich auch die zu den zeigern gehörigen objekten gleich sein
Was aber noch lange nicht bedeutet, dass die Objekte ungleicch sind, wenn die Zeiger ungleich sind.
-
groovemaster schrieb:
otze schrieb:
er sollte eigentlich nur die zeigeraddressen vergleichen, denn wenn 2 zeiger gleich sind, müssten eigentlich auch die zu den zeigern gehörigen objekten gleich sein
Was aber noch lange nicht bedeutet, dass die Objekte ungleicch sind, wenn die Zeiger ungleich sind.
ich würde sagen, wenn mans aus dem sichtwinkel der zeiger sieht, dann kann man das nicht so pauschal sagen...
die objekte können aus zeigersicht nur gleich sein, wenn sie den gleichen speicherbereich besitzen, da es ja noch einen neuen testwert gibt->die position im speicher.
-
Wie soll der std::vector überhaupt so intelligent(?) sein, Zeiger zu "erkennen" und zu dereferenzieren, womöglich auch noch in beliebiger Tiefe (Doppelzeiger, Dreifachzeiger, etc.), hmmm?
-
Till schrieb:
Wie soll der std::vector überhaupt so intelligent(?) sein, Zeiger zu "erkennen" und zu dereferenzieren, womöglich auch noch in beliebiger Tiefe (Doppelzeiger, Dreifachzeiger, etc.), hmmm?
der std::vector kann das nicht. eine traits enhanced version hingegen schon, und noch um einiges mehr.
-
otze schrieb:
ich würde sagen, wenn mans aus dem sichtwinkel der zeiger sieht, dann kann man das nicht so pauschal sagen...
Doch, kann man. Ich zumindest
Kleines Beispielclass foo { private: int i_; public: foo(int i) : i_(i) { } }; //... foo* a = new foo(10); foo* b = new foo(10);
Sind die Adressen der Zeiger a und b gleich?
Sind die Objekte, die sich hinter a und b verbergen, gleich?