/ / Problemi di rimanere bloccati nel ciclo infinito mentre si scorre attraverso i vettori - c ++

Problemi di rimanere bloccati nel ciclo infinito mentre si scorre attraverso i vettori - c ++

Voglio cercare attraverso un vettore di coppie e per farlo..io sto facendo quanto segue:

 vector<pair<double ,double> > vec_pairs;

for(vector<unsigned int>::size_type j = 0; j != vec_pairs.size(); j++ )
{
if(vec_pairs[j].first==12.6)
{
int z=7;
continue;
}
}

Comunque il mio problema è ... dopo averlo fatto ... mi sto bloccando in un loop infinito ... Qualcuno può aiutarmi a risolvere il problema

risposte:

0 per risposta № 1

Prima di tutto, il codice che hai pubblicato funziona bene "così com'è".

L'unica ragione per cui un tale tipo di codice deve andare in loop infinito è quello di modificare j all'interno del ciclo.

Se tu aumentare j all'interno del circuito, probabilmente non rimarrai bloccato perché uscirai dalle obbligazioni e potresti avere il tuo codice in crash.

for(vector<unsigned int>::size_type j = 0; j != vec_pairs.size(); j++ )
{
if(vec_pairs[j].first==12.6)
{
j++;//You will go out of vector bonds and might get an error here.
continue;
}
}

Tuttavia, se fai qualcosa di simile:

for(vector<unsigned int>::size_type j = 0; j != vec_pairs.size(); j++ )
{
if(vec_pairs[j].first==12.6)
{
j--;//j is decreased each time you get in here, so you will be stuck on one element,
continue;
}
}

Allora resterai bloccato dentro, perché quando vai nel if affermazione (per esempio, sull'elemento 7), j diminuirà a 6, quindi lo farai continue il cappio, j aumenterà di nuovo a 7, andrai dentro il if di nuovo, e così via.


0 per risposta № 2

Ho testato il tuo codice in codepad. Controllalo Qui! E sta funzionando bene. Controlla il valore della variabile j durante il debug. Come disse SingerOftheFall, potrebbe essere decrementato o resettato da qualche parte. Può anche andare su un ciclo infinito se si aggiungono elementi all'interno del ciclo che aumentano il valore di vec_pairs.size() e la condizione j != vec_pairs.size() non sarà mai vero in quel caso. Non riesci a trovare nulla di sbagliato nel codice che hai dato.