2016-09-12 2 views
-4

i schreiben, dieses Stück Code:-Feed std :: vector <unsigned char> von unsigned char *

unsigned char *buffer = ... 
... 
std::vector<unsigned char> vec(buffer,128); 

Dies funktioniert, aber ich möchte den Vektor nach seiner Erklärung füttern (nehme an, der Vektor a Feld einer Klasse)

unsigned char *buffer = ... 
... 
std::vector<unsigned char> vec; 
... 
vec = vec(buffer,128) ??? 

Ich weiß nicht, was in der letzten Zeile zu tun ist. Das einzige, was tatsächlich funktioniert, ist die Größe des Vektors ändern und dann ein Memcpy tun. Gibt es einen besseren Weg?

+2

Es kann sich lohnen, durch *** [die Dokumentation] (http://en.cppreference.com/w/cpp/container/vector) *** zu lesen. Das wird Ihnen sagen, welche Funktionen was machen. – Galik

Antwort

2

Nun, mit Bewegung Semantik Sie einfach

vec = std::vector<unsigned char>(buffer, buffer + 128); 

tun Wenn das Ihre Federn kräuselt, können Sie std::copy zusammen mit std::back_inserter verwenden:

vec.reserve(128); 
std::copy(buffer, buffer+128, std::back_inserter(vec)); 

Eine weitere Option ist vector::assign zu verwenden.

+0

Würde 'vec = std :: vector (puffer, 128);' tatsächlich funktionieren? Welcher Konstrukteur würde es anrufen? – wally

+0

@flatmouse, das passiert beim Kopieren und Einfügen. – SergeyA

+0

Es ist der Gedanke, der zählt. :) – wally

2

Da ein Zeiger und ein Iterator grundsätzlich dasselbe sind, können Sie std::vector::assign oder std::vector::insert verwenden. assign den Vektor auf den Bereich eingestellt, während insert es auf alle vorhandenen Elemente in dem Vektor

vec.assign(buffer, buffer + size_of_buffer) 
//or 
vec.insert(vec.end(), buffer, buffer + size_of_buffer) 
      ^^^^^^^^^ position to insert the elements before 

Beachten Sie auch, dass

std::vector<unsigned char> vec(buffer,128); 

Ist kein gültiger Konstruktor Aufruf für eine std::vector hinzufügen, wenn Sie versuchen, den Vektor direkt aus dem Puffer zu erstellen, den Sie benötigen

std::vector<unsigned char> vec(buffer, buffer + size_of_buffer); 
Verwandte Themen