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!