Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bemone en 23 Agosto 2013, 03:32 am



Título: [Ayuda] Vectores
Publicado por: bemone en 23 Agosto 2013, 03:32 am
Buenas noches.
Tengo un gran problema que me esta trabando y rompiendo mucho las bolas.
Tengo varios vectores de char donde en varias posiciones las marco con una "X" y luego las comparo.
Si en la posicion del vector1 y en la misma posicion del vector2 hay una "X", marco el vector1 con una "A" y actualizo un contador.
Despues muestro todas las posiciones donde en el vector1 hay una "A" y no muestra nada.
El problema es que el contador me lo devuelve correcto (las coincidencias de posiciones en las que hay una "X" entre los dos vectores) pero el vector1 nunca es marcado con una A o una D.

Por ejemplo:

(http://s2.subirimagenes.com/imagen/previo/thump_8589911sin-ttulo.png)

El codigo de la discordia:
Código
  1. int Cartones::compararCartones(Cartones ganador){
  2.    int coincidencias = 0;
  3.    vector<char> cartonGanador = ganador.getNumeros();
  4.    for(int i=0; i<cartonGanador.size(); i++){
  5.        if(cartonGanador[i] == 'X' && this->vsNumeros[i] == 'X'){
  6.            this->vsNumeros[i] = 'A';
  7.            coincidencias++;
  8.        }
  9.        else
  10.            this->vsNumeros[i] = 'D';
  11.    }
  12.        return coincidencias;
  13. }


Título: Re: [Ayuda] Vectores
Publicado por: amchacon en 23 Agosto 2013, 10:02 am
¿A quien te refieres con vector1? ¿Al vsNumeros?

Por cierto, unos consejos de eficiencia:

Código
  1. int Cartones::compararCartones(Cartones ganador){

No pases el objeto entero, su copia supone un desperdicio de memoria y de tiempo de ejecución. Pasa una referencia en su lugar, y ya de paso lo haces constante:

Código
  1. int Cartones::compararCartones(const Cartones &ganador){

Por otro lado:

Código
  1. vector<char> cartonGanador = ganador.getNumeros();

Copiar un vector supone gastar muchos recursos. No sé si es mejor que devuelvas un puntero/referencia al vector, aunque eso supondría un encapsulamiento más débil.


Título: Re: [Ayuda] Vectores
Publicado por: bemone en 23 Agosto 2013, 16:01 pm
¿A quien te refieres con vector1? ¿Al vsNumeros?

Por cierto, unos consejos de eficiencia:

Código
  1. int Cartones::compararCartones(Cartones ganador){

No pases el objeto entero, su copia supone un desperdicio de memoria y de tiempo de ejecución. Pasa una referencia en su lugar, y ya de paso lo haces constante:

Código
  1. int Cartones::compararCartones(const Cartones &ganador){

Por otro lado:

Código
  1. vector<char> cartonGanador = ganador.getNumeros();

Copiar un vector supone gastar muchos recursos. No sé si es mejor que devuelvas un puntero/referencia al vector, aunque eso supondría un encapsulamiento más débil.


Con vector1 me refiero a vsNumeros y con vector2 a cartonGanador.
Gracias por los consejos. ¿Sabes porque no puedo modificar vsNumeros?

En cuanto al vector lo puedo poner asi:
Código
  1. int Cartones::compararCartones(const Cartones &ganador){
  2.    int coincidencias = 0;
  3.    for(unsigned int i=0; i<ganador.getNumeros().size(); i++){
  4.        if(ganador.getNumeros()[i] == 'X' && this->vsNumeros[i] == 'X'){
  5.            this->vsNumeros[i] = 'A';
  6.            coincidencias++;
  7.        }
  8.        else
  9.            this->vsNumeros[i] = 'D';
  10.    }
  11.        return coincidencias;
  12. }


Título: Re: [Ayuda] Vectores
Publicado por: amchacon en 23 Agosto 2013, 17:04 pm
Con vector1 me refiero a vsNumeros y con vector2 a cartonGanador.
Pues el código es correcto, asi que el error debe estar en otra parte  :huh:

Los dos vectores tienen el mismo tamaño no?

En cuanto al vector lo puedo poner asi:
Código
  1. int Cartones::compararCartones(const Cartones &ganador){
  2.    int coincidencias = 0;
  3.    for(unsigned int i=0; i<ganador.getNumeros().size(); i++){
  4.        if(ganador.getNumeros()[i] == 'X' && this->vsNumeros[i] == 'X'){
  5.            this->vsNumeros[i] = 'A';
  6.            coincidencias++;
  7.        }
  8.        else
  9.            this->vsNumeros[i] = 'D';
  10.    }
  11.        return coincidencias;
  12. }
Eso es peor, en cada iteración estas generando un vector nuevo *_*. Lo puedes dejar como estaba si eso, si es un vector de 10-20 números no supone tanta carga (lo malo sería si fuesen 1000 números xD).


Título: Re: [Ayuda] Vectores
Publicado por: bemone en 23 Agosto 2013, 17:12 pm
Pues el código es correcto, asi que el error debe estar en otra parte  :huh:

Los dos vectores tienen el mismo tamaño no?
Eso es peor, en cada iteración estas generando un vector nuevo *_*. Lo puedes dejar como estaba si eso, si es un vector de 10-20 números no supone tanta carga (lo malo sería si fuesen 1000 números xD).

Tienen exactamente el mismo tamaño (25). Lo que no entiendo es porque no se modifica el vector, en la condicion entra ya que el contador se actualiza.


------------------------------------------------------------------------------------------------

Solucionado: habia un problema en el orden en como llamaba los metodos.

 :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[

Gracias amchacon por tu buena onda!