Inicializar vector dentro de estructura en C++

Usuario 102811
#1  Enviado: 00:22 06/09/2012

Buenas.

Estoy liado con una cosilla de C++ que me tiene sin avanzar. Tengo definido un vector de estructuras tal que:

typedef struct
{
 std::vector<float> coord;
 int n_cluster;
} Punto;

std::vector<Punto> puntostotal;


Y quiero que el vector coord esté definido de inicio por 3 posiciones que valgan 0. Supongo que será algo muy evidente, pero si uso el clásico:

std::vector<float> coord (3, 0);


Me dice que dentro de una estructura no se puede hacer... a ver si podéis echarme una mano, porque es una tontería y no me deja avanzar...

Gracias! Y un saludo!
nintendero21
Lugar: Valencia · 1224 mensajes · Colección
#2  Enviado: 12:50 06/09/2012

Ojalá pudiera ayudarte, empecé ayer a estudiar c++ por mi cuenta...
El tamaño del genoma no importa//Votos positivos(x21)-------->Poyales,Necroth,linkes,Osaka no Kotatsu,Odnanreph,Lonrot,Isabelita,Rinoa-Spain, -Luix-,ziggy,tripikart,darveider,freddy,pikmiki,elokillo,multiplicate,JC,claset1111,kiketonto,N3aR,ZeroP.No soy nintendero!!!(ni ningún otro)
Usuario 102811
#3  Enviado: 13:05 06/09/2012

Ya lo he solucionado, y puedo hacer el código extensible. Lo único que hago es crear un puntero que apunte a la estructura (lo llamo Punto pGuiño y guardarlo asi:
p.coord.push_back();


Fácil y rápido Smilie  
Usuario 121417
#4  Enviado: 13:44 06/09/2012  Editado: 16:29 06/09/2012 (5 veces)

Voy a comentarte otra manera más sofisticada para conseguirlo:

En C++ puedes tratar una estructura (que no sea anónima) como si fuese una clase, y establecer la visibilidad de las variables y (lo que te interesa) establecer constructores y destructores:

#include <vector>
#include "stdio.h"

// Llamo a la estructura _Punto para poder darle un nombre al constructor
typedef struct _Punto
{
   std::vector<float> coord;
   int n_cluster;

   _Punto(void)
   {
       coord.insert(coord.begin(), 3, 0.0f);
   }
} Punto;

int main(void)
{
   Punto puntos[10];

   for(int i = 0; i < 10; ++i)
   {
       printf("puntos[%d].coord.size() = %d\n", i, (int) puntos[ i ].coord.size());

       for(int j = 0; j < puntos[ i ].coord.size(); ++j)
       {
           printf("puntos[%d].coord[%d] = %f\n", i, j, (float) puntos[ i ].coord[ j ]);
       }
   }

   return 0;
}


La salida del programa ha de ser la siguiente:

Secreto: (Pincha para leerlo)


En el código de arriba, cada vez que creas una estructura Punto se ejecuta su constructor _Punto().
Puedes probar cambiando en la invocación de insert() el 3 (elementos a insertar) y el 0.0f (el valor a insertar en cada elemento)

Con este método tienes la ventaja de tener el código de definición y de inicialización en el mismo sitio, en lugar de (posiblemente) desperdigado por el código, lo que puede producir errores si inicializas en más de un sitio y al querer cambiar el contenido inicial olvidas por descuido cambiar una de las inicializaciones.

Edit: los corchetes de indexación no aparecían.
Este tema está inactivo y no se puede replicar más.
Buscar en el foro: En foro: Tipo:
Foro de Vandal
Flecha subir