2010-04-28 21 views
5

estoy tratando de hacer algo como:¿Cómo declaro e inicializo un vector int 2d en C++?

#include <iostream> 
#include <vector> 
#include <ctime> 

class Clickomania 
{ 
    public: 
     Clickomania(); 
     std::vector<std::vector<int> > board; 
}; 

Clickomania::Clickomania() 
    : board(12, std::vector<int>(8,0))    <<<<<<< 
{ 

    srand((unsigned)time(0)); 

    for(int i = 0; i < 12; i++) 
    { 
     for(int j = 0; j < 8; j++) 
     { 
      int color = (rand() % 6) + 1; 
      board[i][j] = color; 
     } 
    } 
} 

Sin embargo, al parecer no puedo inicializar el "tablero" vector de vectores de esta manera.

¿Cómo puedo crear un miembro público de un tipo de vector 2d e inicializarlo correctamente?

+3

¿Por qué no puede inicializarlo de esta manera? (aparte del hecho de que probablemente deberías llamar a 'srand' en otro lugar, en lugar de cada vez que creas una placa). –

+1

Compila bien en Visual Studio 2005. ¿Cuál es el error del compilador, exactamente? –

+0

Compila y se ve bien. Aún así, debe llamar al 'srand' en otro lugar y proporcionar parámetros en lugar de" números mágicos "' 12, 8, 0, 6, etc ... –

Respuesta

3

Al compilar tu código con g ++, el error que recibo es que ni srand() ni rand() fueron declarados. Tuve que agregar #include <cstdlib> para el código a compilar. Pero una vez que hice eso, funcionó bien. Entonces, yo diría que además de agregar esa declaración de inclusión, su código está bien. Estás inicializando el vector correctamente.

¿Quizás el código que tiene no coincide exactamente con el que publicó? Supongo que si su código actual no incluyera cstdlib, habría comprendido rápidamente que ese era el problema en lugar de algo con el vector. Entonces, si su código no coincide exactamente con lo que publicó, tal vez ese sea el problema. Si no, ¿qué compilador estás usando?

5

uso de una matriz en su lugar:

(Ejemplo básico de la documentación impulso)

#include <boost/numeric/ublas/matrix.hpp> 
#include <boost/numeric/ublas/io.hpp> 

int main() { 
    using namespace boost::numeric::ublas; 
    matrix<double> m (3, 3); 
    for (unsigned i = 0; i < m.size1(); ++ i) 
     for (unsigned j = 0; j < m.size2(); ++ j) 
      m (i, j) = 3 * i + j; 
    std::cout << m << std::endl; 
} 
+0

¿Por qué el voto a favor de este? –

+3

Quizás porque no tiene nada que ver con hacer funcionar el vector en el código anterior como la pregunta. No lo sé. Creo que bajar la votación es un poco duro, esta respuesta * es * potencialmente útil después de todo, pero técnicamente no responde a la pregunta. –

+3

+1, no creo que sea necesario votar por una respuesta útil, incluso si no responde exactamente la pregunta del OP. –

11

se debe utilizar el constructor que le permite especificar el tamaño y el valor inicial de los dos vectores que puede que sea un poco más fácil en conjunto.

algo como:

vector<vector<int>> v2DVector(3, vector<int>(2,0)); 

debería funcionar.

+5

Eso es exactamente lo que hace el OP. –

+0

Sí, acabo de notar que ... no sé cómo me lo perdí. – sanimalp

Cuestiones relacionadas