inserto di STL :: deque (loc, val) - comportamento incoerente alla fine della coda doppia vs altre posizioni?

StackOverflow https://stackoverflow.com/questions/1972403

Domanda

http://www.cppreference.com/wiki/stl/deque/ inserisco come riferimento, che si inseriva valori in una deque in determinate posizioni.

Per esempio, se deque A era:

a, b, d, e, g

con un iteratore che punta al d, posso:

A.insert(iter, c);    // insert val c before loc iter
//deque is now    a, b, c, d, e, g

e l'iter punta ancora al d. Tuttavia, quando iter punti di g, l'ultimo elemento:

A.insert(iter, f);
//deque is now    a, b, c, d, e, f, g

ma l'iter ora punta a f !!

La mia soluzione attuale è:

iter = A.insert(loc, val);  // point iterator to element that was inserted before loc
iter++;                     // point iter back to loc

Non ho ancora testato questo nuovo o niente, era fastidioso di aver trascorso così tanto tempo il monitoraggio di un bug in giù, solo per scoprire inserto () 's comportamento incoerente, in STL, di tutti posti.

Perché inserire () si comportano in modo diverso quando, alla fine, rispetto a qualsiasi altro luogo? O è che ho fatto qualcosa di sbagliato?

È stato utile?

Soluzione

Esecuzione di un inserto invalida tutti iteratori esistenti, in modo da otterrete un comportamento imprevedibile (forse un crash) riutilizzando il vecchio iteratore.

La vostra soluzione è la soluzione corretta.

Modifica: bretelle Per quanto riguarda la seconda domanda, si sono dispersi dopo if (*iter == 'g'). In futuro, però, si prega di mettere nuove domande in un nuovo post.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top