problem mit erase vector
-
danke fuer die antwort. da hast recht, ich will nur ein einzelnes element loeschen. dazu sollte man vielleicht wissen, wie ich GRID definiert habe:
vector <cLine> GRID[2];ich geht im speziellen darum, eine einzelne linie, die weniger als eine bestimmte punktanzahl enthaelt, aus dem vector herauszuloeschen. alle anderen linien sollen im GRID enthalten bleiben. leider akzeptiert der compiler den unten beschrieben code nicht und gibt darum diese fehlermeldung aus.
achso, und wozu sollte ich den operator einsetzen?
-
danke fuer die antwort. da hast recht, ich will nur ein einzelnes element loeschen. dazu sollte man vielleicht wissen, wie ich GRID definiert habe:
vector <cLine> GRID[2];ich geht im speziellen darum, eine einzelne linie, die weniger als eine bestimmte punktanzahl enthaelt, aus dem vector herauszuloeschen. alle anderen linien sollen im GRID enthalten bleiben. leider akzeptiert der compiler den unten beschrieben code nicht und gibt darum diese fehlermeldung aus.
achso, und wozu sollte ich den operator einsetzen?
-
stick_thai schrieb:
danke fuer die antwort. da hast recht, ich will nur ein einzelnes element loeschen. dazu sollte man vielleicht wissen, wie ich GRID definiert habe:
vector <cLine> GRID[2];ich geht im speziellen darum, eine einzelne linie, die weniger als eine bestimmte punktanzahl enthaelt, aus dem vector herauszuloeschen. alle anderen linien sollen im GRID enthalten bleiben. leider akzeptiert der compiler den unten beschrieben code nicht und gibt darum diese fehlermeldung aus.
achso, und wozu sollte ich den operator einsetzen?
Die Funktion remove benötigt den, um herauszufinden welches Element gelöscht werden soll.
-
HALLO.
ich habe noch eine frage zu dem oben geposteten code von PONTO zu den operatoren
==und!=.
was haben "and" und "not" für eine bedeutung?achso, und warum heisst es
other.itsBETAund nicht
other.m_getBeta()??
DANKE.
STICK.
-
stick_thai schrieb:
HALLO.
ich habe noch eine frage zu dem oben geposteten code von PONTO zu den operatoren
==und!=.
was haben "and" und "not" für eine bedeutung?Gar keine: Das "and" müßte eigentlich ein "&&" sein, und das "not" ein "!".
stick_thai schrieb:
achso, und warum heisst es
other.itsBETAund nicht
other.m_getBeta()??
DANKE.
STICK.Da die Vergleichs-Opreratoren hier offenbar Member der Klasse sind, spielt es keine Rolle.
Sollte aber eigentlich nicht so sein. Es gab vor kurzem mal einen Thread, der sich darüber ausließ das operator== immer ein freier Operator sein sollte und in dem Fall hätte ausschließlich m_getBeta() funktioniert (es sei denn man macht den operator zu einem friend der Klasse).
-
Was ist das eigentlich für eine Errungenschaft die Methoden mit m_ zu kennzeichnen?!?
-
Eine, die möglichst schnell wieder in Vergessenheit geraten sollte?

-
stick_thai schrieb:
HALLO.
ich habe noch eine frage zu dem oben geposteten code von PONTO zu den operatoren
==und!=.
was haben "and" und "not" für eine bedeutung?and bedeutet das gleiche wie && und not bedeutet das gleiche wie !. In C++ darf man die sprechenden Namen verwenden.
-
LordJaxom schrieb:
Was ist das eigentlich für eine Errungenschaft die Methoden mit m_ zu kennzeichnen?!?
und seit wann heißen eigentlich in C++ nicht-statische funktionen einer klasse methoden?

-
SERVUS.
ich möchte nochmal zu meinem code nachhacken. ich habe jetzt die veränderungen von PONTO (also die beiden operatoren == und !=) in meine klasse eingefügt. zumindest gibts jetzt auch keine fehlermeldung mehr und es werden auch ein paar von den linien, die zuwenig punkte enthalten (GRID[i][j].m_size()<dnv), herausgelöscht. leider werden auch welche gelöscht, die genügend punkte enthalten und es gibt immer noch einige, deren grösse zwar kleiner als dnv ist, aber die nicht gelöscht werden. es werden also teilweise die falschen linien gelöscht, und die kurzen linien bleiben erhalten. woran kann das jetzt noch liegen?
DANKE.
STICK.p.s.: hier nochmal mein neuer code:
for (i=0;i<2;i++) { for (j=0;j<GRID[i].size();j++) { if (GRID[i][j].m_size()<dnv) { GRID[i].erase(remove (GRID[i].begin(),GRID[i].end(),GRID[i][j])); j--; } } }hie die klasse:
class cLine { public: vector <cPoint> PKT; cLine :: cLine () { cPoint p; p.m_setpkt(0,0); PKT.push_back(p); itsBETA = 0; itsP = 0; } cLine :: ~cLine () {} int m_size () const {return (PKT.size());}; void m_inback (double i, double j) { cPoint p; p.m_setpkt(i,j); if (PKT.back().GetX()==0 && PKT.back().GetY()==0 && PKT.size()==1) PKT[0].m_setpkt(p.GetX(),p.GetY()); else PKT.push_back(p); } void m_infront (double i, double j) { cPoint p; p.m_setpkt(i,j); if (PKT.front().GetX()==0 && PKT.front().GetY()==0 && PKT.size()==1) PKT[0].m_setpkt(p.GetX(),p.GetY()); else PKT.insert(PKT.begin(),p); } cPoint m_getpkt (int i) {return PKT[i];} cPoint m_back () const {return (PKT.back());}; cPoint m_front () const {return (PKT.front());}; void m_clear () {PKT.clear();} void m_setpara (double i, double j) { itsBETA = i; itsP = j; } double m_getBeta () const {return itsBETA;} double m_getP () const {return itsP;} bool operator== (cLine const &other) const {return itsBETA == other.itsBETA && itsP == other.itsP;} bool operator!= (cLine const &other) const {return !(*this == other);} private: double itsBETA; double itsP; };EDIT:
ich habe es inzwischen selber gelöst, auch ohne "==" und "!=" operator. so sieht die lösung jetzt aus:for (i=0;i<2;i++) { vector<cLine>::iterator it = GRID[i].begin(); j=0; while (it!=GRID[i].end()) { if (GRID[i][j].m_size()<dnv) GRID[i].erase(it); else { j++; it++; } } }