c++ array zu vektor

Gast #3929160
Lesenswert?
• ▲
▼
Hi.

Auf der Suche nach einer Möglickkeit ein Array in einen Vektor zu 
konvertieren bin ich auf folgendes Template gestoßen:

template< typename T, size_t N >
std::vector<T> makeVector( const T (&data)[N] )
{
    return std::vector<T>(data, data+N);
}

const int values[] = { 1,2,3,7 };
std::vector<double> array = makeVector(values);

Auch weil man hier nichts hardkodieren muß(Array-Größe) finde ich das 
Template passend für meine Zwecke. Nur ist mir nicht genau klar wie im 
Template die Größe N vom Compiler bestimmt wird. Bitte um Aufklärung 
;-).

Gruß
Benny
#3929258
Lesenswert?
• ▲
▼
Die Maschinerie dazu nennt sich Template Argument Deduction. Deine 
Funktion hat 2 template Parameter und erwartet eine Referenz auf ein 
Array von Ts mit N Elementen. Wenn du diese Funktion mit einem Array 
aufrufst versucht der Compiler den Typ T und den Wert N vom übergebenen 
Typ abzuleiten. Wie der Compiler das genau tut ist durch zahlreiche 
Regeln festgelegt, die nicht gerade einfach sind, aber oft das tun was 
man intuitiv erwartet. Wenn du die Funktion mit etwas anderem als einem 
Array aufrufst, einem Pointer z.B. dann wird Template Argument Deduction 
fehlschlagen und es gibt einen Fehler vom Compiler. Falls du mehr über 
diese Thema wissen möchtest kann ich dir dieses Video (und auch alle 
anderen Videos von STL) empfehlen: 
http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-2-of-n

Edit: Ich weiß nicht was du genau mit der Funktion erreichen willst aber 
wenn du nur einfach einem std::vector Werte zuweisen willst dann gibt es 
seit C++11 praktische initializer lists mit denen folgender Code möglich 
ist:
std::vector<double> array = { 1,2,3,7 };

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren