Maison >développement back-end >C++ >Comment obtenir un pointeur de données brutes à partir d'un « std :: vector » ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-21 22:57:11279parcourir

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);

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

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

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()

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!

Déclaration:
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