2016-04-15 13 views
0

So ive-Arrays auf diese Weise zu machen, aber ich einen Fehler gefunden, kann sagen, dass es eine Schleife ist, die durch das Element kopiert und Array-Element:Gibt es eine Möglichkeit, die Größe eines Arrays zu erhalten, ohne es manuell zu finden?

int v1[] = { 3, 4, 7, 8}; 
int v2[sizeof(v1)]; 
for (auto i = 0; i < sizeof(v2); ++i) 
{ 
    v2[i] = v1[i] 
} 

Das Array v2 wird die Größe von 4 ganzen Zahlen nicht hat, fügt sie alle auf. Also hätte v2 die Größe von 22 nicht 4 ganzen Zahlen. Also habe ich mich gefragt, ob es irgendeinen Weg gibt, die Größe eines Arrays zu finden, ohne zu dem Array gehen zu müssen und zu sehen, wie viele Elemente dort manuell sind. Gibt es einen Weg? Vielen Dank.

+0

Ändern Sie einfach 'sizeof (v1)' und 'sizeof (v2)' in 'sizeof (v1)/sizeof (int)' und 'sizeof (v2)/sizeof (int)' oder 'sizeof (v1)/sizeof (v1 [0]) 'und' sizeof (v2)/sizeof (v1 [0]) ' – DimChtz

+0

sizeof (v1) liefert die Gesamtgröße des Bytes des Speichers unter dem Array, nicht die Anzahl der ints. – Ivan

Antwort

2

Während ich mit dem Rest zustimmen, dass Sie STL-Container in der Regel in Ihrem Fall verwenden, sollten Sie die Anzahl der Elemente in die bekommen Array mit sizeof(v1)/sizeof(int). sizeof(v1) gibt Ihnen die Gesamtzahl der Bytes für ein 4-Integer-Array und Division durch sizeof(int) wird Ihnen die Anzahl der Elemente geben.

+0

Danke für die Formatierungshilfe. – overflowingstack

+0

Obwohl ich '' '' 'std :: array'''' empfehlen würde, kann dieser Code etwas verbessert werden, indem' '' 'sizeof (v1)/sizeof (declltype (v1))' '' verwendet wird '. – xboi209

3

Verwenden Sie einfach std::array oder std::vector:

std::array<int, 4> v1 { 3, 4, 7, 8}; 
auto v2 = v1; 

Live demo

+0

Danke, sollte ich immer std :: array über die c style-array –

+1

@Harrythehacker Im Zweifel, ja. Es ist auf jede mögliche Weise ziemlich überlegen. – Shoe

+0

In C++? Definitiv, es sei denn, Sie rufen eine C-API auf, die ein C-artiges Array erfordert. –

Verwandte Themen