Vector-erase durch Pointer?



  • Hallo,

    Ich habe ein problem mit dem Löschen von Elementen eines Vektors, welcher ales pointer an eine Funktion übergeben wird.

    #include <vector>
    
    using namespace std; 
    
    typedef unsigned int uint;
    
    void funct1 (vector<uint> **allvectors){
    
                 vector<uint>::iterator it=allvectors[1][0].begin();
    
                 while (it != allvectors[1][0].end()) {
    
    				if (it->allvectors[1][0] == 1) {
    
    					allvectors[1][0].erase(it);
    
    					break;
    
    					}
    
    					++it;
    
    }
    
    }
    
    int main(){
    
          vector<uint> vect1;
    
          for(int i=0;i < 10;i++){ 
    
          vect1.push_back(i);
    
    }
    
    vector<uint> *allvectors[10];
    
    *allvectors[1]=vect1;
    
    funct1(allvectors);
    
    }
    

    ICh erhalte beim Kompilieren immer eine Fehlermeldung.
    Leider habe ich keine Ahnung, was das Problem mit dem it-> pointer ist.
    Vielen Dank im Voraus!!



  • Abgesehen von der fürchterlichen Einrückung und der unausführlichen Compilermeldung:

    if (it->allvectors[1][0] == 1) { wird zu if (*it == 1)



  • Danke!

    Ja klar, der Iterator muss nur noch dereferenziert werden! ➡



  • Martin2000 schrieb:

    ICh erhalte beim Kompilieren immer eine Fehlermeldung.

    Zur Laufzeit wirds auch nicht besser werden. Du erstellst hier ein Array von Zeigern auf 10 std::vector<uint> s. Selbst wenn ich mir erklären könnte, warum man so einen umständlichen Weg wählt, bliebe immer noch das Problem, dass du nicht initialisierte Zeiger dereferenzierst.

    vector<uint> *allvectors[10]; 
    *allvectors[1]=vect1;
    

    Zeiger auf Zeiger braucht man auch nur sehr selten in C++. Was willst du genau erreichen? Wir können dir wahrscheinlich eine bessere Möglichkeit aufzeigen.


Anmelden zum Antworten