2010-04-19 4 views

Respuesta

24

El segundo argumento para that constructor es el valor para inicializar. En este momento estás obteniendo 4 vectores construidos por defecto. Para aclarar con un ejemplo 1D más simple:

// 4 ints initialized to 0 
vector<int> v1(4); 

// *exactly* the same as above, this is what the compiler ends up generating 
vector<int> v2(4, 0); 

// 4 ints initialized to 10 
vector<int> v3(4, 10); 

Así que usted quiere:

vector< vector<int> > bar(4, vector<int>(4)); 
//    this many^ of these^

Esto crea un vector de vectores de enteros, inicializado para contener 4 vectores que se inicializan para contener 4 intercepciones, inicializados a 0. (Puede especificar un valor predeterminado para int, si lo desea).

A boca llena, pero no demasiado. :)


Para un par:

typedef std::pair<int, int> pair_type; // be liberal in your use of typedef 
typedef std::vector<pair_type> inner_vec; 
typedef std::vector<inner_vec> outer_vec; 

outer_vec v(5, inner_vec(5, pair_type(1, 1)); // 5x5 of pairs equal to (1, 1) 
//    this many^of these^
//this many^ of these^
+0

El optimizador prematura en mí grita a la vista de esta última línea de código ... – sbk

+0

¿Qué pasa si en lugar de int, lo que quería hacer otro par . ¿Hay alguna forma de inicializar todos los pares para que contengan 0,0? – zebraman

+0

@zebra: Pares inicializarán las entradas a 0 ellos mismos. Pero para completar, edité mi publicación. – GManNickG

1

Como alternativa a un std::vector puede utilizar boost::multi_array. De the documentation:

#include "boost/multi_array.hpp" 
#include <cassert> 

int 
main() { 
    // Create a 3D array that is 3 x 4 x 2 
    typedef boost::multi_array<double, 3> array_type; 
    typedef array_type::index index; 
    array_type A(boost::extents[3][4][2]); 

    // Assign values to the elements 
    int values = 0; 
    for(index i = 0; i != 3; ++i) 
    for(index j = 0; j != 4; ++j) 
     for(index k = 0; k != 2; ++k) 
     A[i][j][k] = values++; 

    // Verify values 
    int verify = 0; 
    for(index i = 0; i != 3; ++i) 
    for(index j = 0; j != 4; ++j) 
     for(index k = 0; k != 2; ++k) 
     assert(A[i][j][k] == verify++); 

    return 0; 
} 
Cuestiones relacionadas