[C con Clase] Problema para guardar matrices como vectores

victor Gonyi mrpiperoman en hotmail.com
Lun Mar 4 22:50:12 CET 2013


Buenas noches.

Estoy intentando hacer una estructura de datos para guardar valores tipo int, que pueden ser 0, 1 o 2. Para ello, quiero usar un vector compuesto de vectores.

Para ello he creado un tipo concreto:

typedef vector< vector<int> > discreteCharacter;

Esta es la especificación que he diseñado:

/**
 * \brief Transform a char given into an Decoded Char
 *
 * Description: This function is used by decodeMessage. Must decode all chars and concatenate the result in phraseTotal.
 * Length can be variable.
 *
 * 0 = No coin
 * 1 = Coin
 * 2 = Coin with half offset down
 *
 * - Use base 2 to set spacial position for each coin.
 *
 * Example: "E" length = 4
 *                             '                   '                '
 * 1    1    1   0         ||||||||||||        ||||
 * 1    2    0   0         ||||||||||||        ||||  = 1     @@ = 2
 * 1    0    0    0        ||||                                 @@
 * 1    1    1    0        ||||@@
 *                             ||||@@
 *                             ||||                '
 *                             ||||||||||||              = 0
 *                             ||||||||||||
 *
 * \param[in]          decodeChar = Char you want to translate
 * \param[out]        2dim-vector = with values 0,1,2 in array
 *
 */
vector< vector<int> > BonusCoinsController::decodeCharacter(const char *decodeChar)
{
    printf("BonusCoinsController decoding char: %s", decodeChar);

    discreteCharacter myDecodedCharacter(4, vector<int>(4));
    //myDecodedCharacter.push_back(vector<int> (1,1,1,0));

    /*
    switch (decodeChar)
    {
        case "E":
   /*
    myDecodedCharacter = ( (1,1,1,0),
                                              (1,2,0,0),
                                              (1,0,0,0),
                                              (1,1,1,0));
*/

            break;
            
        default:
            break;
    }*/
    return myDecodedCharacter;
}

Es decir, antes una entrada compuesta por 1 solo caracter: "A", "E", "~", debe devolver un vector de longitud X, que varía según el caracter introducido.

Mi falta de experiencia manejando vectores me hace complicado buscar la forma más correcta/elegante de hacer la función. De ahí mis preguntas:

- ¿Es correcto el planteamiento?
- ¿Cuál es la mejor manera de crear el tipo discreteCharacter si a priori no sé cuanta longitud tiene el caracter introducido? Podría hacer 2 switch pero lo veo un poco engorroso, y no sé si es lo más correcto reservarlo dentro del switch y poner un return en cada uno.
- ¿Cuál es la sintaxis correcta para que se pueda poner los valores de forma que "a ojo" se pueda ver que carácter es y facilitar su entendimiento? Es decir viendo:
myDecodedCharacter = (     (1,1,1,0),
                                              (1,2,0,0),
                                              (1,0,0,0),
                                              (1,1,1,0));

Si está bien tabulado, te puedes hacer a la idea que es realmente una E.

He probado con llaves, corchetes, operator= y me da errores de compilación continuamente, aun consultando la referencia: http://www.cplusplus.com/reference/vector/vector/vector/ 

Es un poco complicado para mí usar el vector de forma recursiva, así que cualquier ayuda/sugerencia es bienvenida.

Gracias por vuestro tiempo, un saludo.
 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130304/0a9aaec1/attachment.html>


Más información sobre la lista de distribución Cconclase