2012-10-29 16 views
20

Posiadanie wektor wektor z ustalonym rozmiarze,Inicjowanie wektor wektorów mających stały rozmiar z doładowania przypisać

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

chciałbym go zainicjować tak, że ma we wszystkich elementach jest jeden wymiarowy wektor z wartość inicjalizowana (na przykład 1).

Użyłem doładowania Przypisz następująco

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

i mam błąd kompilacji

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

mógłbyś mi powiedzieć jak to zrobić. Z góry z góry

Odpowiedz

27

nie wykorzystać boost::assign ale robi to, co trzeba:

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

ten tworzy wektor zawierający 10 wektorów int, z których każdy zawiera 10 ints.

17

Nie musisz używać boost dla wymaganego zachowania. Poniższa tworzy vector z 10vector<int> s, przy czym każdy vector<int> zawierających 10int S o wartości 1:

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

była to pierwsza odpowiedź pisał, że jest to najlepsze rozwiązanie, a mimo to nie jest ani przyjęta odpowiedź ani najbardziej up-głosowanie jeden. westchnienie. życie nie jest sprawiedliwe. – dbliss

+0

Myślę, że to dlatego, że ma '>>' ie.e> 'bez spacji pomiędzy: p – krozaine

4

Po prostu spróbuję wyjaśnić to nowym użytkownikom w C++. Wektor z verctors mat ma tę zaletę, że można uzyskać dostęp do jego elementów bezpośrednio na prawie bez kosztów za pomocą operatora [] ..

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

Oczywiście nie jest to jedyny sposób. A jeśli nie dodasz lub nie usuniesz elementów, możesz również użyć rodzimych kontenerów, które są niczym więcej niż wskaźnikami. Tu jest mój ulubiony sposób, przy użyciu 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; 
} 

ten sposób, nie trzeba używać #include <vector>. Mam nadzieję, że jest jaśniejszy!

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

Wejście:

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

wyjściowa:

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