Heim >Backend-Entwicklung >C++ >Wie rufe ich einen Rohdatenzeiger von einem std::vector ab?

Wie rufe ich einen Rohdatenzeiger von einem std::vector ab?

Barbara Streisand
Barbara StreisandOriginal
2024-11-11 17:34:02267Durchsuche

How to Retrieve a Raw Data Pointer from a std::vector?

Rohdatenzeiger von std::vector abrufen

Problem:

Sie möchten Verwenden Sie einen std::vector als char-Array innerhalb einer Funktion, die einen void-Zeiger akzeptiert. Versuche, den Vektor direkt oder über seinen begin()-Iterator zu übergeben, haben zu falschen Daten oder Compiler-Warnungen geführt.

Lösung:

Um auf die Rohdaten eines std zuzugreifen ::vector, erhalten Sie die Adresse seines Anfangselements mit einer der folgenden Methoden:

  • &something[0] oder &something.front() – gibt die Adresse des Elements am Index 0 zurück.
  • &*something.begin() – gibt die Adresse des Elements zurück, auf das der begin()-Iterator zeigt.

Ab C 11 ist eine zusätzliche Option verfügbar:

  • &something.data() – gibt die Adresse des Anfangselements zurück und sorgt so für Sicherheit für leere Behälter.

Beispiele:

void process_data(const void *data);

std::vector<char> something;

// Cast the raw data pointer to char* for compatibility.
char *data_ptr = reinterpret_cast<char*>(something.data());
process_data(data_ptr);

Das obige ist der detaillierte Inhalt vonWie rufe ich einen Rohdatenzeiger von einem std::vector ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn