Autor
|
Tema: Sugerencias! (Leído 2,502 veces)
|
MellaSystems
Desconectado
Mensajes: 46
|
Tengo esta funcion para agregar un string a un vector, pero con la condicion de no tener nombres repetidos pero me explota el programa. void addNomEst(){ system("cls"); cout<<"\n\n\t <<<<<<<<<<<<<<<<<<<<MENU INSERTAR>>>>>>>>>>>>>>>>>>>>>>>\n\n\n"; string nombre; int PosNom= 0, j=0; cout<<"Digite el nombre que desea agregar: "; cin.ignore(256,'\n'); cin >> nombre; for(it = NomEst.begin(); it != NomEst.end(); ++it){ if((*it) == nombre){ PosNom++; } } if (PosNom > 0){ j++; system ("cls"); cout << "\n\nESTE NOMBRE YA EXISTE!!!" << endl; cout << "\n\nFAVOR DIGITAR OTRO NOMBRE DE ESTUDIANTE DIFERENTE\n" << endl; system("pause"); }PosNom = 0; NomEst.push_back(nombre); if(j==1){ NomEst.erase(it); vector<string>::iterator itTemp = --it; PosNom++; } j=0; system("pause"); }
miren la imagen.
|
|
|
En línea
|
|
|
|
Orubatosu
|
Hombre... no soy un experto, pero veo algunas cosas que no me cuadran, a ver si me las puedes explicar.
Asumo que es una función, a la que además no le pasas parámetros ¿?¿? Debo de suponer que NoEst la has definido como global. ¿Es así?...
Luego veo que usas iteradores, lo cual me parece estupendo... solo que no has definido el iterador dentro de la función.
Este tipo de error suele darse cuando el bucle se "sale" de los límites del objeto.
¿Debo de entender que todo lo has hecho global?... los iteradores son muy puñeteros en estas cosas, y yo al menos suelo declararlos siempre dentro de su ámbito de trabajo, ya que desaparecen fuera del mismo.
Al margen de eso, si efectivamente estás trabajando con "todo global", comentarte que es una costumbre cuestionable, ya que es una fuente de errores muy grande
|
|
|
En línea
|
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness" Hideto Matsumoto 1964-1998
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Pese a que sea correcto poner ++j y luego compararlo con 1 es poco entendible. Usa en su lugar una variable bool (o haz "j = 1;") Luego: if(j==1){ NomEst.erase(it); vector<string>::iterator itTemp = --it; PosNom++; }
Desde el momento en que haces push_back, el iterador 'it' puede quedar inservible. Haz en su lugar NomEst.erase(NomEst.end()-1). El problema está mal planteado: " Añadir al vector el valor. Si ya existía, lo elimino." Lo lógico es: " Si no existe el valor, añadirlo."
|
|
|
En línea
|
|
|
|
MellaSystems
Desconectado
Mensajes: 46
|
Gracias a ambos sus respuestas me sirvieron. Otacu me ayudaste ya que mi Iteradores de salía de rango e Iván me aclaró la lógica de mi algoritmo
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Sugerencias
Sugerencias y dudas sobre el Foro
|
vicecity
|
5
|
4,892
|
19 Marzo 2004, 20:03 pm
por theskull
|
|
|
SUGERENCIAS
Ejercicios
|
soplo
|
8
|
13,805
|
16 Julio 2009, 23:55 pm
por anigami
|
|
|
Sugerencias por fas ....
Multimedia
|
_Joselo_
|
2
|
2,997
|
23 Marzo 2006, 18:00 pm
por necrotemor
|
|
|
Sugerencias
« 1 2 ... 5 6 »
Ingeniería Inversa
|
Shaddy
|
57
|
84,681
|
13 Noviembre 2024, 09:54 am
por Villalobos
|
|
|
Sugerencias
Programación C/C++
|
Gerik
|
1
|
2,853
|
3 Septiembre 2010, 06:37 am
por carlitos_jajajajaja
|
|