2012-10-29 17 views
20

Avere un vettore di vettore con una dimensione fissa,Inizializzazione un vettore di vettori aventi una dimensione fissa con boost assegnare

vector<vector<int> > v(10); 

desidero inizializzare in modo che esso ha in tutti gli elementi di un unico vettore tridimensionale con valore inizializzato (ad esempio 1).

ho usato Boost Assegnare come segue

v= repeat(10,list_of(list_of(1))); 

e ho un errore di compilazione

error: no matching function for call to ‘repeat(boost::assign_detail::generic_list<int>)’ 

La prego di dirmi come fare. Grazie in anticipo

risposta

27

Questo non usa boost::assign, ma fa quello che vi serve:

vector<vector<int> > v(10, vector<int>(10,1)); 

Questo crea un vettore contenente 10 vettori di int, ciascuno contenente 10 ints.

17

Non è necessario utilizzare boost per il comportamento richiesto. Il seguente crea un vector di 10vector<int> s, con ogni vector<int> contenenti 10int s con un valore di 1:

std::vector<std::vector<int>> v(10, std::vector<int>(10, 1)); 
+2

questa è stata la prima risposta postato, è la migliore risposta, e tuttavia non è né la risposta accettata né il più up-votato uno. sospiro. la vita non è giusta – dbliss

+0

Penso che sia perché ha '>>' i.e '>' senza spazio tra: p – krozaine

4

Proverò solo a spiegarlo a quelli nuovi in ​​C++. Un vettore di verctors mat ha il vantaggio che si può accedere ai suoi elementi direttamente a quasi costo zero utilizzando l'operatore [] ..

int n(5), m(8); 
vector<vector<int> > mat(n, vector<int>(m)); 

mat[0][0] =4; //direct assignment OR 

for (int i=0;i<n;++i) 
    for(int j=0;j<m;++j){ 
     mat[i][j] = rand() % 10; 
    } 

Naturalmente questo non è l'unico modo. E se non aggiungi o rimuovi elementi, puoi utilizzare anche i contenitori nativi mat[] che non sono altro che puntatori. Ecco il mio modo preferito in California, in C++:

int n(5), m(8); 
int *matrix[n]; 
for(int i=0;i<n;++i){ 
    matrix[i] = new int[m]; //allocating m elements of memory 
    for(int j=0;j<m;++j) matrix[i][j]= rand()%10; 
} 

In questo modo, non c'è bisogno di usare #include <vector>. Spero che sia più chiaro!

0
#include <vector> 
#include <iostream> 
using namespace std; 


int main(){ 
    int n; cin >> n; 
    vector<vector<int>> v(n); 
    //populate 
    for(int i=0; i<n; i++){ 
     for(int j=0; j<n; j++){ 
      int number; cin >> number; 
      v[i].push_back(number); 
     } 
    } 
    // display 
    for(int i=0; i<n; i++){ 
     for(int j=0; j<n; j++){ 
      cout << v[i][j] << " "; 
     } 
     cout << endl; 
    } 
} 

ingresso:

4 
11 12 13 14 
21 22 23 24 
31 32 33 34 
41 42 43 44 

uscita:

11 12 13 14 
21 22 23 24 
31 32 33 34 
41 42 43 44