Inicializar vector dentro de estructura en C++

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!
Prueba usando un constructor. No estoy seguro, pero es lo único que se me ocurre.
typedef struct
{
  std::vector<float> coord;
  int n_cluster;
  Punto() {
      coord = std::vector<float> (3, 0);
   }
} Punto;
elchicosinhada escribió:Prueba usando un constructor. No estoy seguro, pero es lo único que se me ocurre.
typedef struct
{
  std::vector<float> coord;
  int n_cluster;
  Punto() {
      coord = std::vector<float> (3, 0);
   }
} Punto;


Algo asi habia pensado yo también, pero yo siempre que quiero hacerme una estructura, lo hago sin el typedef

struct Punto{
   vector<float> coord;
   int n_cluster;

   Punto(){
      coord=vector<float>(3,0);
   }
};


De la otra forma, en el constructor de Punto, me dice "error: ISO C++ prohíbe la declaración de ‘Punto’ sin tipo [-fpermissive]", supongo que porque se está intentando usar antes de haber declarado Punto.
Escribe al principio del programa "using name space std".

Así ya no tendrás que poner std:: nunca más...
amchacon escribió:Escribe al principio del programa "using name space std".

Así ya no tendrás que poner std:: nunca más...


pues eso no lo sabia xD

Yo no he puesto el std:: porque nunca me ha hecho falta ponerlo... pero es que claro, siempre pongo el "using namespace std;" porque directamente me acostumbraron a eso, sin explicarme para que servia siquiera xD
Uf... sin entrar muy en detalle:

1) Los contenedores de STL copian mucho sus elementos. No se si realmente te interesa andar copiando muchas veces ese vector de floats.
2) Realmente:

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

    Punto() : coord(0, 3)
    {
    }
};

3) Si tu vector de 'coord' solo tiene 3 elementos. Usa otra cosa como un array, un boost::array o algo similar.
4) "using namespace std;" te puede traer más problemas de los que crees. Es mejor que hagas "using std::vector;" si realmente escribir "std::" es tan laborioso.

- fer
Gracias por lo que habéis comentado, ya lo tengo funcionando, aunque la opción de ferdy tengo que mirarla (la 3).

Yo me he acostumbrado a usar std y paso del using namespace, aunque para opencv si que lo uso.
6 respuestas