fehler beim löschen eines vector-elementes mit einem iterator....



  • wenn ich in meiner funktion einen vector vc überprüfe und bestimmte inhalte in einen anderen packe (temp) und die umgepackten inhalte im vector löschen will, bekomme ich einen fehler bei meinem erase-iterator. was soll ich bloß tun???

    float xxx(vector<char> vc, int pos_sign) {
    
      int x = (pos_sign - 1);
      vector<char> temp;
    
      while(true) {
        if(isdigit(vc[x]) && x != NULL) {
          x--;
          temp.push_back(vc[x]);
          vc.erase(x);
        }
        else break;
      }
    
      return xxxx(temp, x);
    }
    

    ich bekomm die meldung:

    /home/ceberus/C++/tr_sim/src/tr_sim.cpp:80: error: no matching function for call to `std::vector<char, std::allocator<char> >::erase(int&)'
    /usr/include/g++/bits/vector.tcc:105: error: candidates are: __gnu_cxx::__normal_iterator<_Tp*, std::vector<_Tp, _Alloc> > std::vector<_Tp, _Alloc>::erase(__gnu_cxx::__normal_iterator<_Tp*, std::vector<_Tp, _Alloc> >) [with _Tp = char, _Alloc = std::allocator<char>]
    /usr/include/g++/bits/vector.tcc:117: error: __gnu_cxx::__normal_iterator<_Tp*, std::vector<_Tp, _Alloc> > std::vector<_Tp, _Alloc>::erase(__gnu_cxx::__normal_iterator<_Tp*, std::vector<_Tp, _Alloc> >, __gnu_cxx::__normal_iterator<_Tp*, std::vector<_Tp, _Alloc> >) [with _Tp = char, _Alloc = std::allocator<char>]



  • warum antwortet denn jeder lieber solchen dofen fregen wie oben???
    warum funktionier dieser beschissene iterator nicht???????????



  • Hi,

    Wie wärs, wenn du dich noch auf den Boden schmeißt und mit den Beinen strampelst.

    die Methode erase erwartet einen std::voctor<char>::iterator& und du übergibst einen int&

    sag Danke



  • danke; 😞 aber die variable x soll doch die position des elementes sein, das gelöscht werden soll, ein char-element kommt deswegen doch eigentlich nicht infrage?? denn im nachschlagewerk stand das in etwa so:

    vector.erase(pos)
    

    wie kann ich bsp.-weise element 3 im vector löschen😕

    thx für alle antworten!



  • "pos" soll an dieser Stelle vom Typ "vector<char>::iterator" sein, dann funktioniert auch erase.



  • könnte bieeeeeeeeeette jemand ein winziges beispiel machen, ich studier das leider nicht(noch nicht) 😞



  • Hallo,

    x == Position, dann ist vector.begin()+x dasjenige Element, welches du entfernen
    willst.

    Achtung: Bei std::vector funktioniert das, bei z. B. std::list ist das, afaik,
    nicht unbedingt so (es kann sein).

    mfg
    v R



  • for(vector<char>::iterator it = vc.begin(); it != vc.end(); it++)
    {
        if(isdigit(*it)) 
        {  
          vc.erase(it); 
        }
    }
    


  • thx



  • if(isdigit(vc[x]) && x != NULL) {
    

    Das x != NULL ist völlig daneben. NULL ist zwar afaik schon gleich 0, aber warum sollte man bei einer Integerkonstante NULL statt 0 verwenden. Das wäre ja wie zu schreiben ONE + TWO statt 1 +2 😃

    Außdem ist dir anscheinend nicht klar, was ein Iterator ist. Du sprichst vom Löschen via Iterator, was du aber eigentlihc machst ist das Löschen per Index...also lies dir mal irgendwo was über Iteratoren etc. durch

    Mfg, smasher1985


Anmelden zum Antworten