Maison > développement back-end > C++ > le corps du texte

Comment obtenir un pointeur de données brutes à partir d'un « std :: vector » ?

Susan Sarandon
Libérer: 2024-11-21 22:57:11
original
196 Les gens l'ont consulté

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

Fournir un pointeur de données brutes pour std :: vector

Lorsque vous travaillez avec std :: vector en tant que tableau de caractères, il peut y avoir un besoin de transmettre un pointeur de données brutes à une fonction qui attend un pointeur vide. À l'origine, des tableaux de caractères étaient utilisés à cette fin, comme l'illustre le code :

char something[] = "my data here";
process_data(something);
Copier après la connexion

Cependant, le dynamisme de std::vector est souhaitable, conduisant à la tentative suivante :

vector<char> something;
*cut*
process_data(something);
Copier après la connexion

Le défi se pose en transmettant le vecteur char à la fonction de telle sorte qu'elle puisse accéder aux données brutes du vecteur.

Passer le pointeur de données brutes

Transmettre l'adresse de l'objet vectoriel, à l'aide de &quelque chose, est incorrect car il ne fournit pas l'adresse des données. De même, l'utilisation de &something.begin() n'est pas standard et entraîne un avertissement.

L'approche correcte consiste à obtenir l'adresse de l'élément initial du conteneur, ce qui peut être obtenu via :

&something[0] // or &something.front()
&*something.begin()
Copier après la connexion

En C 11, la classe std::vector introduit une nouvelle fonction membre, data(), qui sert le même objectif que les méthodes ci-dessus. Il renvoie l'adresse de l'élément initial du conteneur et peut être utilisé en toute sécurité même lorsque le conteneur est vide.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal