Heim >Backend-Entwicklung >C++ >Wie erhalte ich einen Rohdatenzeiger von einem „std::vector'?

Wie erhalte ich einen Rohdatenzeiger von einem „std::vector'?

Susan Sarandon
Susan SarandonOriginal
2024-11-21 22:57:11284Durchsuche

How to Obtain a Raw Data Pointer from a `std::vector`?

Bereitstellung eines Rohdatenzeigers für std::vector

Beim Arbeiten mit std::vector als char-Array kann es sein, dass ein Sie müssen einen Rohdatenzeiger an eine Funktion übergeben, die einen leeren Zeiger erwartet. Ursprünglich wurden zu diesem Zweck char-Arrays verwendet, wie der Code zeigt:

char something[] = "my data here";
process_data(something);

Die Dynamik von std::vector ist jedoch wünschenswert, was zu folgendem Versuch führt:

vector<char> something;
*cut*
process_data(something);

Die Herausforderung besteht darin, den char-Vektor so an die Funktion zu übergeben, dass sie auf die Rohdaten des Vektors zugreifen kann Daten.

Übergabe des Rohdatenzeigers

Die Übergabe der Adresse des Vektorobjekts mithilfe von &something ist falsch, da dadurch nicht die Adresse der Daten bereitgestellt wird. Ebenso ist die Verwendung von &something.begin() nicht standardmäßig und führt zu einer Warnung.

Der richtige Ansatz besteht darin, die Adresse des Anfangselements des Containers abzurufen, was wie folgt erreicht werden kann:

&something[0] // or &something.front()
&*something.begin()

In C 11 führt die Klasse std::vector eine neue Mitgliedsfunktion ein, data(), die demselben Zweck dient wie die oben genannten Methoden. Es gibt die Adresse des Anfangselements des Containers zurück und kann auch dann sicher verwendet werden, wenn der Container leer ist.

Das obige ist der detaillierte Inhalt vonWie erhalte ich einen Rohdatenzeiger von einem „std::vector'?. 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