2012-10-29 9 views
20

Nachdem einen Vektor von Vektor mit einer festen Größe,Initialisieren ein Vektor der Vektoren feste Größe mit Boost zuweisen

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

ich es initialisieren möchte, so dass es in allen Elementen mit einem eindimensionalen Vektor hat initialisierter Wert (zum Beispiel 1). wie folgt

I-Boost-Assign haben

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

verwendet und ich habe einen Kompilierungsfehler hat mich

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

Könnten Sie bitte sagen, wie das zu tun. Vielen Dank im Voraus

Antwort

27

Diese nicht boost::assign nicht verwendet, aber das tut, was Sie brauchen:

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

Diese erzeugt einen Vektor, der 10 Vektoren von int enthält, wobei jeder 10 ints enthält.

17

Sie müssen boost für das erforderliche Verhalten nicht verwenden. Im Folgenden schafft eine vector von 10vector<int> s, mit je vector<int> enthält 10int s mit einem Wert von 1:

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

dies war die erste Antwort geschrieben, es ist die beste Antwort, und doch ist es weder die akzeptierte Antwort noch die meisten up-Abstimmung ein. Seufzer. Das Leben ist nicht fair. – dbliss

+0

Ich denke es ist, weil es '>>' '' '' '' ohne Leerzeichen dazwischen hat: p – krozaine

4

Ich werde versuchen, es zu den neuen in C++ zu erklären. Ein Vektor von verctors mat hat den Vorteil, dass Sie seine Elemente direkt auf fast keine Kosten zugreifen können .. die [] Operator

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; 
    } 

Natürlich ist dies nicht der einzige Weg ist. Und wenn Sie keine Elemente hinzufügen oder entfernen, können Sie auch die nativen Container mat[] verwenden, die nichts anderes als Zeiger sind. Hier ist meine fav Art und Weise, mit 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; 
} 

Auf diese Weise müssen Sie nicht #include <vector> verwenden. Hoffentlich ist es klarer!

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; 
    } 
} 

Eingang:

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

Ausgang:

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