Maison >développement back-end >C++ >Comment obtenir un pointeur de données brutes à partir d'un std :: vector ?
Récupération std::vector du pointeur de données brutes
En programmation, il est souvent nécessaire de transmettre des données à des fonctions qui attendent un pointeur brut vers les données elles-mêmes. Cette tâche peut être difficile lorsque vous travaillez avec des conteneurs dynamiques comme std::vector.
Considérez un scénario dans lequel vous disposez d'une fonction process_data() qui prend un pointeur const void en entrée. Auparavant, vous pouviez simplement transmettre un tableau de caractères par référence :
char something[] = "my data here"; process_data(something);
Cependant, lors de la conversion de cette logique pour utiliser un std::vector
vector<char> something; process_data(something);
ou en prenant l'adresse de son itérateur de début :
process_data(&something.begin());
résultat en données ou compilateur absurdes avertissements.
Le défi réside dans l'obtention d'un pointeur vers les données réelles dans le std::vector. Pour ce faire, plusieurs options s'offrent à vous :
1. Accéder au premier élément :
Vous pouvez récupérer l'adresse du premier élément du vecteur :
process_data(&something[0]); // or &something.front()
2. Utilisation de la fonction membre data() (C 11 et versions ultérieures) :
En C 11, std::vector a introduit la fonction membre data() :
process_data(something.data());
Cette fonction est préférable car il est sûr d'appeler même lorsque le vecteur est vide.
Remarque : &something fournit l'adresse de l'objet vectoriel lui-même, pas ses données. Par conséquent, il ne doit pas être utilisé à cette fin.
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!