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
Barbara Streisandoriginal
2024-11-12 08:39:02708parcourir

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);

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);

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!

Déclaration:
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