Ich versuche, std::vector
als char
Array zu verwenden.
Meine Funktion nimmt einen leeren Zeiger auf:
void process_data(const void *data);
Bevor ich einfach diesen Code verwendet habe:
char something[] = "my data here";
process_data(something);
Welches hat wie erwartet funktioniert.
Aber jetzt brauche ich die Dynamik von std::vector
, also habe ich stattdessen diesen Code ausprobiert:
vector<char> something;
*cut*
process_data(something);
Die Frage ist, wie ich den Zeichenvektor an meine Funktion übergebe, damit ich auf die Vektorrohdaten zugreifen kann (egal welches Format es ist - Floats usw.).
Ich habe es versucht:
process_data(&something);
Und das:
process_data(&something.begin());
Aber es gab einen Zeiger auf Kauderwelschdaten zurück, und dieser warnte : warning C4238: nonstandard extension used : class rvalue used as lvalue
.
vector<bool>
dies die Ausnahme von dieser Antwort ist (und keinen zusammenhängenden Speicher vonbool
s hat).std::vector<bool>
dastd::vector<bool>
ein Proxy-Objekt verwendet werden muss und dieser Proxy nicht implizit in a konvertiert werden kannbool*
. Als Problemumgehungbool
ist es am besten , wenn Sie eine Sequenz von benötigen , einfach eine zu verwendenstd::vector<char>
. @ Motti.data()
- I'lll ich einfach so tun , nicht sehen , dass hässlich&*iterator
: Pdata()
live zurückkehren? Wenn die Größe des Vektors weder größer noch kleiner geändert wird (überpush_back()
oder andere Funktionen, einschließlichreserve
), ist dann garantiert, dass der Zeiger so lange lebt, wie der Vektor lebt, und auf die richtige Stelle zeigt?something.data()
gibt einen Zeiger auf den Datenraum des Vektors zurück.quelle
error C2039: 'data' : is not a member of 'std::vector<_Ty>'
vector::data()
ist neu in C ++ 11Nehmen Sie stattdessen einen Zeiger auf das erste Element:
quelle