2010-12-26 25 views
18

Come si trova la dimensione di un vettore bidimensionale? Finora ho il seguente codice che non viene compilato.C++/Dimensioni di un vettore 2d

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 

    vector < vector <int> > v2d; 

    for (int x = 0; x < 3; x++) 
    { 
     for (int y = 0; y < 5; y++) 
     { 
      v2d.push_back(vector <int>()); 
      v2d[x].push_back(y); 
     } 
    } 

    cout<<v2d[0].size()<<endl; 
    cout<<v2d[0][0].size()<<endl; 

    return 0; 
} 

risposta

26

Per ottenere la dimensione del V2D, è sufficiente utilizzare v2d.size(). Per le dimensioni di ciascun vettore all'interno di v2d, utilizzare v2d [k] .size().

Nota: per ottenere l'intera dimensioni di v2d, riassumere la dimensione di ogni singolo vettore, come ogni vettore ha la sua dimensione.

8

Lo vector<vector<int>> non ha una dimensione intera, poiché ogni vettore al suo interno ha una dimensione indipendente. È necessario sommare le dimensioni di tutti i vettori contenuti.

int size = 0; 
for(int i = 0; i < v2d.size(); i++) 
    size += v2d[i].size(); 
+1

Ricordate lo spazio temuta! 'vector >', non 'vector >' – marcog

+0

@marcog: Quanti anni ha il compilatore? Sono abbastanza sicuro che non sia stato necessario dal C++ 98. – Puppy

+1

Il requisito per lo spazio è stato eliminato solo in C++ 0x. Lasciarlo fuori è un errore di compilazione che usa GCC. Vedi http://ideone.com/mGdWb – marcog

9

Hai avuto alcuni errori nel codice, che ho corretto e commentato di seguito.

vector < vector <int> > v2d; 

for (int x = 0; x < 3; x++) 
{ 
    // Move push_back() into the outer loop so it's called once per 
    // iteration of the x-loop 
    v2d.push_back(vector <int>()); 
    for (int y = 0; y < 5; y++) 
    { 
     v2d[x].push_back(y); 
    } 
} 

cout<<v2d.size()<<endl; // Remove the [0] 
cout<<v2d[0].size()<<endl; // Remove one [0] 

v2d.size() restituisce il numero dei vettori nel vettore 2D. v2d[x].size() restituisce il numero di vettori in "riga" x. Se sai che il vettore è rettangolare (tutte le "righe" hanno le stesse dimensioni), puoi ottenere la dimensione totale con v2d.size() * v2d[0].size(). In caso contrario, è necessario scorrere le "righe":

int size = 0; 
for (int i = 0; i < v2d.size(); i++) 
    size += v2d[i].size(); 

come un cambiamento, è anche possibile utilizzare iterators:

int size = 0; 
for (vector<vector<int> >::const_iterator it = v2d.begin(); it != v2d.end(); ++it) 
    size += it->size(); 
Problemi correlati