2010-04-19 11 views

risposta

24

Il secondo argomento su that constructor è il valore da inizializzare con. In questo momento stai ottenendo 4 vettori costruiti in modo predefinito. Per chiarire con un esempio 1D semplice:

// 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); 

Così si vuole:

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

Questo crea un vettore di vettori di interi, inizializzato per contenere 4 vettori che vengono inizializzati per contenere 4 int, inizializzati a 0. (È possibile specificare un valore predefinito per l'int, se lo si desidera.)

A bocca piena, ma non troppo difficile. :)


Per una coppia:

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

L'ottimizzatore prematura in me urla alla vista di questa ultima riga di codice ... – sbk

+0

cosa succede se invece di int, ho voluto fare un altro paio . C'è un modo per inizializzare tutte le coppie per contenere 0,0? – zebraman

+0

@zebra: le coppie inizializzeranno gli interi a 0 stessi. Ma per completezza ho modificato il mio post. – GManNickG

1

alternativa ad un std::vector è possibile utilizzare boost::multi_array. Da 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; 
} 
Problemi correlati