2011-09-22 21 views
9

Witam Chcę zainicjować wektor rozmiaru 9, którego elementy są wektorami wielkości, powiedzmy 5. Chcę zainicjować wszystkie elementy do wektora zerowego.Inicjalizacja wektora wektora <doubles> C++

Czy to prawda?

vector<double> z(5,0); 

vector< vector<double> > diff(9, z); 

Czy istnieje krótszy sposób na zrobienie tego?

+1

To jest poprawny sposób tworzenia wektora 2D. Po prostu jesteś trochę bardziej gadatliwy. –

+2

Czy ten rozmiar 9x5 jest stały? –

+0

Tak, znam rozmiary przed ręką. Po prostu wybrałem cyfry 9 i 5 jako przypadkowe int dla tego pytania. – smilingbuddha

Odpowiedz

12

potencjalnie można zrobić to w jednym wierszu:

vector<vector<double> > diff(9, vector<double>(5)); 

Można również rozważyć użycie boost::multi_array dla bardziej efektywnego przechowywania i dostępu (unika podwójnego wskaźnika zadnie).

+1

Alternatywnie, wektor 45 elementów z dostępem skośnym może również wystarczyć ... –

+2

'wektor (5)' wystarcza. 'wektor (5, 0)' nie jest wymagany, o ile drugi argument to '0'. – Nawaz

4

Dość pewien, że to będzie działać:

vector< vector<double> > diff(9, vector<double>(5,0)); 
5

Można umieścić je wszystkie w jednym wierszu:

vector<vector<double>> diff(9, vector<double>(5)); 

ten sposób unika niewykorzystaną zmienną lokalną.

(w pre-C++ 11 kompilatory trzeba zostawić przestrzeń, > >.)

+0

Uważaj na '>>' w swojej składni. Niektóre kompilatory wymagają spacji między tymi symbolami. – riwalk

+3

@ Stargazer712 te kompilatory nie są już zgodne! : P –

+2

@ R.MartinhoFernandes, zgodny lub nie, istnieją :) – riwalk

5

vector< vector<double> > diff(9, std::vector<double>(5, 0));

Jednak w tym konkretnym przypadku, gdy rozmiary są znane w czasie kompilacji ty mógł korzystania macierz C:

double diff[9][5] = { { 0 } };

4

Jeśli rozmiary są stałe, można przejść z std::array zamiast:

std::array<std::array<double,5>,9> diff = {}; 
+1

To zależy również od wielkości obszarów. 'std :: array' zachowuje wszystko w zasięgu lokalnym, więc jeśli ta tablica jest zbyt duża, możesz wywołać błąd, którego nazwa wymyka mi się. –

+0

Przepełnienie stosu? –