Maison > développement back-end > C++ > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-12 08:39:02
original
670 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!

source:php.cn
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