Donc tu as un vecteur de monstres de taille 1, un vecteur de joueurs de taille 2, et un vecteur de personnages (qui regroupe donc tout) de taille 3, c'est ça ? (pour ton exemple en tout cas)
Oui exactement ça
J'ai un peu de mal à comprendre ce que tu cherches à faire en fait
En gros faire le combat (ou le joueur choisit d'attaquer telle cible, et ou le monstre attaque après etc (tour par tour) puis de retourner la vie des joueurs pour qu'au prochain combat ils "réapparaissent" avec leur vie d'avant!
cette double affectation et ce return au milieu d'une boucle me troublent un peu...
C'est un peu bizarre oui, en plus ça marche pas donc j'aime pas 
A priori allVector est trié donc tu n'as pas besoin de tester l'élément courant si tu connais le nombre de monstres et de personnages.
C'est bien là le problème, en fait, le vector est trié selon la vitesse des membres pour que les actions s’exécutent dans le bon ordre! De plus, le nombre de monstre est certe défini au début mais ensuite il y en aura entre 1 et 4 aléatoirement à chaque fois 
Pour l'affectation, tu peux la faire dans la méthode et ne rien retourner (void) ?
Bah le problème c'est que c'est une autre fonction qui appelle combat donc pas possible 
(ce dont je parlais avec un tableau serait globalement la même chose, sauf que tu passerais par une variable locale intermédiaire que la méthode renverrait, et que tu affecterais au tableau playersLife)
Quelle serai la syntaxe du coup? playersLife[] = combat(Players, Monsters) où combat return LifePlayersAfterFight[]? Et dans le for? 