Accès aux données vectorielles brutes en tant que tableau de caractères
Considérez la nécessité d'utiliser un std::vector comme tableau de caractères dans une fonction qui attend un pointeur vide. Au départ, utiliser un tableau de caractères standard était simple. Cependant, passer à la flexibilité d'un std::vector présente un défi pour accéder à ses données brutes.
Passer le pointeur vectoriel à une fonction
Les tentatives immédiates de passez le vecteur &something, ou son itérateur, &something.begin(), à la fonction car les pointeurs void n'ont pas donné les résultats souhaités. Au lieu de cela, &something renvoie l'adresse de l'objet std::vector, pas les données elles-mêmes, tandis que &something.begin() fournit l'adresse d'un itérateur, qui n'est pas autorisée comme lvalue.
Adressage l'élément à l'index 0
La solution réside dans la récupération de l'adresse du premier élément du vecteur. Ceci peut être réalisé par plusieurs méthodes. Une approche consiste à utiliser &something[0], qui donne l'adresse de l'élément à l'index 0. Une autre option consiste à utiliser &something.front(), qui effectue la même tâche.
Data() Fonction en C 11
Pour C 11 et versions ultérieures, une fonction membre pratique appelée data() a été introduite dans std::vector. Cette fonction renvoie directement l'adresse de l'élément initial dans le conteneur. Son avantage réside dans le fait qu'il peut être utilisé en toute sécurité même lorsque le conteneur est vide.
Conclusion
Pour transmettre des données std::vector à une fonction qui accepte les pointeurs vides, il est nécessaire pour récupérer l’adresse du premier élément du vecteur. Cela peut être fait en utilisant &something[0], &something.front() ou la fonction data(), selon la version C et la taille du conteneur.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3