Solo tiene 2 detalles con 2 condiciones:
1) Línea 31:
for(unsigned cont=cont2+1;cont<(vect.num_elem)-1;cont++)
Tiene que llegar hasta el final.
cont < num_elem - 1 no llega hasta el último, sinó hasta el penúltimo. 2 opciones: o cambiar "<" por "<=" o, mejor, poner
cont < vect.num_elem2) Línea 39:
while((cont<vect.num_elem-2)&&!existe)
Nuevamente, lo mismo.
cont < num_elem - 2 no llega ahsta el penúltimo, sinó hasta el antepenúltimo. Nuevamente, las mismas 2 opciones de antes: o cambiar "<" por "<=", o poner "num_elem-1". Recomiendo el segundo.
Sobre este tema, tras ver el código, te recomendaría "normalizar" tu forma d eponer condiciones.
for(int cont=0;cont<=(cont2)-1;cont++)
for(unsigned cont=cont2+1;cont<(vect.num_elem);cont++)
¿Por qué uno <= y el otro <? Eso es lo que dbeerías normalizar.