2013-04-26 18 views
7
std::vector<std::vector< std::pair<int, int> > > offset_table; 
    for (int i = 0; i < (offset.Width()*offset.Width()); ++i) 
    { 
    offset_table.push_back( std::vector< std::pair<int, int> > ); 
    } 

Questo è il mio codice, ma sto ottenendo gli errori:Come si spinge indietro un vettore vuoto di coppie in un altro vettore?

main.cpp: In function ‘void Compress(const Image<Color>&, Image<bool>&, Image<Color>&, Image<Offset>&)’: 
main.cpp:48:66: error: expected primary-expression before ‘)’ token 

non voglio alcun valore nelle coppie, Vorrei solo avere un vettore di vettori vuoti al momento. Come lo farei?

risposta

9

vuoi costruire un vettore di passare a push_back e si sta solo manca parentesi:

offset_table.push_back( std::vector< std::pair<int, int> >() ); 

Oppure, al posto del tuo ciclo, si può solo fare quanto segue. E 'meglio, perché il vettore assegnerà la giusta quantità di memoria in un unico stanziamento:

offset_table.resize(offset.Width()*offset.Width(), std::vector< std::pair<int, int> >()); 

O questo, che è più conciso perché sta usando ridimensionare di predefinito 2 ° argomento:

offset_table.resize(offset.Width()*offset.Width()); 
0
std::vector<std::vector< std::pair<int, int> > > offset_table; 

Questo è un array 2d, quindi è necessario utilizzare array nidificati. Per ottenere solo la lunghezza se il vettore interno.

for(vector< pair<int, int >> vv in offset_table) 
{ 
    if(vv.size() == 0) 
    { 
     // this is your target. 
    } 
} 
+0

Penso che tu abbia frainteso la domanda. Penso che la domanda fosse: come si spinge un vettore vuoto in un vettore di vettori. – Owl