vérifier si l’index vectoriel est vide

Dans mon code, je dois faire ceci:

if (edges[j].ConnectedToNode() != i) //problem line { edges.push_back(Edge(i, j, nodes[i].Position(), nodes[j].Position(), distanceToNode)); } 

Cependant, il est possible que les arêtes [j] n’existent pas encore. Comment puis-je tester cela pour éviter et indexer l’exception hors limite? (Cela concerne les nœuds de chemin, essentiellement s’il y a un bord connectant j à i, je ne veux pas en append un autre de i à j.

Avant d’accéder aux edges[j] vérifiez que j < edges.size() .

MODIFIER:

Pour illustrer ce que Mark Ransom a commenté:

 if (j < edges.size() && edges[j].ConnectedToNode() != i) //problem line { edges.push_back(Edge(i, j, nodes[i].Position(), nodes[j].Position(), distanceToNode)); } 

Vous pouvez le faire en vérifiant la taille du vecteur:

 if(edges.size() <= i) // will be false if i is too large 

Si tel est le cas, vous devez redimensionner le vecteur:

  edges.resize(j + 1); 

En fonction de la densité de votre liste d'adjacence, vous obtiendrez un vecteur très clairsemé (la plupart des entrées ne seront pas utilisées). Dans ce cas, vous devriez envisager d'utiliser un std::map ou quelque chose comme ça. Cela a pour avantage qu'une carte crée automatiquement un nouvel index, s'il n'en existe aucun pour la clé donnée.