Element eines Vectors mit einem int löschen



  • hi

    ich möchte ein bestimmtest Element aus einem Vector löschen und habe dafür einen integer als Index zu diesem Element. So Funktioniert das leider nicht ...

    void MeineFunktion(int iIndex) {
    
        MeinVector.erase(iIndex);
    
        }
    

    ... da ein iterator erwartet wird. Dann hab ich es in etwa so versucht ...

    MeineFunktion(int iIndex) {
    
        vector<int>::iterator it  = MeinVector.begin();
        int iVectorsize           = MeinVector.size();
    
        for(int i = 0; i< iVectorsize;) {
    
            if(i == iIndex) { MeinVector.erase(it); }
    
            it++;
            i++;
    
            }
    
        }
    

    ... aber da kommen dann Meldungen wie "error C2440: 'Initialisierung': 'std::_Vector_iterator<_Ty,_Alloc>' kann nicht in 'std::_Vector_iterator<_Ty,_Alloc>' konvertiert werden". Wie muss die Funktion lauten damit ein Element mit Integer gelöscht werden kann. Der Vector trägt mehrere structs.



  • polarhitze schrieb:

    Der Vector trägt mehrere structs.

    Dann solltest du vielleicht einen passenden Iterator benutzen, keinen für vector<int> 😉



  • void  MeineFunktion(int index)
    {
        MeinVector.erase(MeinVector.begin() + index);
    }
    


  • hustbaer schrieb:

    void  MeineFunktion(int index)
    {
        MeinVector.erase(MeinVector.begin() + index);
    }
    

    Das gehört nicht ins WinAPI Forum, hustbaer.



  • CodeGrinder schrieb:

    hustbaer schrieb:

    void  MeineFunktion(int index)
    {
        MeinVector.erase(MeinVector.begin() + index);
    }
    

    Das gehört nicht ins WinAPI Forum, hustbaer.

    Und, darf man auf Fragen nicht antworten nur weil sie im falschen Forum stehen?
    Huh?



  • hustbaer schrieb:

    CodeGrinder schrieb:

    hustbaer schrieb:

    void  MeineFunktion(int index)
    {
        MeinVector.erase(MeinVector.begin() + index);
    }
    

    Das gehört nicht ins WinAPI Forum, hustbaer.

    Und, darf man auf Fragen nicht antworten nur weil sie im falschen Forum stehen?
    Huh?

    Du musst Fehlverhalten nicht noch belohnen.



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum WinAPI in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • template<typename T>
    void erase_vector_item(std::vector<T>& vec, std::size_t index)
    { if (vec.size() <= index) throw std::invalid_argument("index"); vec.erase(vec.begin() + index); }
    

    ...



  • (D)Evil schrieb:

    template<typename T>
    void erase_vector_item(std::vector<T>& vec, std::size_t index)
    { if (vec.size() <= index) throw std::invalid_argument("index"); vec.erase(vec.begin() + index); }
    

    ...

    template<typename Container>
    void erase_index(Container &container, typename Container::size_type index) {
      assert(std::distance(container.begin(), container.end()) > index);
    
      typename Container::iterator it = container.begin();
      std::advance(it, index);
      container.erase(it);
    }
    

    (ungetestet)


Anmelden zum Antworten