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 ?

Barbara Streisand
Libérer: 2024-11-12 08:39:02
original
780 Les gens l'ont consulté

How to Get a Raw Data Pointer from a 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);
Copier après la connexion

Cependant, lors de la conversion de cette logique pour utiliser un std::vector, tente de transmettre le vecteur directement :

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

ou en prenant l'adresse de son itérateur de début :

process_data(&something.begin());
Copier après la connexion

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()
Copier après la connexion

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());
Copier après la connexion

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!

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