2017-07-23 2 views
-3

En référence à cette previous SO question, je corrige mon erreur & changé les itérateurs être de même type « vecteur », à savoirVector itérateurs erreur incompatible pour un vecteur tenant itérateurs d'un autre vecteur

J'ai remplacé la ligne

auto startIter = table.begin();

avec

auto startIter = tabTypeIterVector [0];

dans la boucle for de la fonction AccessTableIteratorsVector(). WRT ci-dessous le code, cependant, je reçois toujours la « affirmation de débogage a échoué, vecteur itérateurs erreur incompatible, lorsque cette ligne est frappé en boucle

itloop = - endIter

typedef vector<vector<string> tableDataType; 
vector<tableDataType::Iterator> tabTypeIterVector; 
tableDataType table; 
FillRows(vector<string> vstr) 
{ 
    table.push_back(vstr); 
    if(some_condition_satisfied_for_this_row()) 
    { 
     tableDataType::Iterator rowIT = table.end(); 
     tabTypeIterVector.push_back(rowIT); 
    } 
} 


In another function: 

AccessTableIteratorsVector() 
{ 
auto startIter = tabTypeIterVector[0]; 
auto endIter = tabTypeIterVector[1]; 
    for(auto itloop=startIter; itloop !=-endIter;itloop++) 
    { 

    } 
} 
+1

* Pourquoi voulez-vous stocker un vecteur d'itérateurs? Quel est le problème * réel * qui est censé résoudre? –

+1

... et pourquoi ne stockez-vous pas simplement des indices qui ne sont pas invalides. – spectras

Répondre

1

push_back pourrait provoquer une redistribution des données contenues dans le vecteur. Et que la redistribution fera tous les itérateurs au vecteur invalide. Déréférencer itérateurs invalides conduit à .

Les index dans le vecteur resteront valides, sauf si vous supprimez des éléments du vecteur.

+0

Est-il possible d'obtenir l'index à partir d'un itérateur vectoriel valide? – codeLover

+1

Je serais plus préoccupé par le fait que le vecteur 'end()' soit stocké. – juanchopanza