2017-05-15 4 views
1

Le code suivant provoque une erreur d'exécution. Dans le code donné, 'blocked' et 'passed' sont deux vecteurs de chaîne et ont respectivement des longueurs bl et pl. 'low' est un itérateur d'un vecteur de chaîne.L'utilisation de la fonction lower_bound dans la boucle provoque une erreur d'exécution?

int pos; 
vector<string> f; 
vector<string>::iterator low; 
for(int i=0;i<bl;i++) { 
     string x=blocked[i]; 
     low=lower_bound(passed.begin(),passed.end(),x); //lower_bound function is used on the vector 'passed'. 
     index=low-passed.begin(); //finding the index of the string in the vector 'passed'. 
     string y=passed[index]; 
     int xlen=x.length(); 
     int ylen=y.length(); 
     int minlen=min(xlen,ylen); 
     for(int i=0;i<minlen;i++) { 
      if(x[i]!=y[i]) { 
       pos=i; 
       break; 
       } 
      } 
      string h=x.substr(0,pos+1); 
      f.push_back(h); 
     } 
     int d=f.size(); 
     for(int i=0;i<f.size();i++) { 
      cout<<f[i]<<endl; 
    } 

Le code entier du code ci-dessus est à https://ideone.com/4NgCWz. Plz aide!

+0

En général, vous devriez vérifier si l'itérateur que vous obtenez des algorithmes est égal à 'passed.end()', car vous n'êtes pas autorisé à déréférencer l'itérateur final. Et dans ce cas, votre 'index' pourrait être éteint – user463035818

Répondre

0

Au deuxième itération du cycle dans la ligne n ° 57, vous obtenez index = 2 pour le tableau:

$5 = std::vector of length 2, capacity 2 = {"codechef", "google"} 

Vous devriez vérifier ce résultat de "lower_bound()" est pas égal passed.end(). Si elle est égale, lower_bound() renvoie l'itérateur à la fin, pas au dernier élément.

+0

Thnx pour l'information! .. c'était la première fois que j'ai utilisé cette stl – lazarus

+0

Mais je veux savoir ... quelle déclaration vais-je écrire pour éviter la limite inférieure() de renvoyer l'itérateur à la fin – lazarus

+0

@lazarus vous ne pouvez pas l'éviter, mais vous pouvez vérifier si elle a renvoyé end: 'if (low == pased.end()) {/ * gérer cette casse * /} else {/ * use low * /} ' – user463035818