Fonction data de <array> en C++
dataest une fonction très spéciale dans array, elleRenvoie un pointeur vers le tableau sous-jacent., ce qui vous permet d'utiliser array comme un tableau C.
dataEst une fonction membre de la classe conteneur, utilisée pourrenvoyer un pointeur vers le stockage interne des données du conteneur. Cela permet à array d'interopérer avec les API de style C ou tout autre code nécessitant des pointeurs bruts.
datafournit un pont entre array et le code en langage C, reflétant la compatibilité de array.
Définitions de mots: datasignifie "data", indiquant l'obtention du pointeur vers les données sous-jacentes.
Syntaxe de base et paramètres
dataest une fonction membre de la classe conteneur, et son appel ne nécessite aucun paramètre.
Format de syntaxe
T* data(); const T* data() const;
Description des paramètres
- Paramètre: Aucun paramètre
dataIl n'accepte aucun paramètre.
Description de la fonction
- Valeur de retour: Renvoie un pointeur vers le tableau sous-jacent.Pointeur. Si le conteneur est un conteneur const, un pointeur const est renvoyé.
- Effet: Le pointeur renvoyé pointe vers le premier élément du conteneur, équivalent à
&operator[](0)。 - Remarque: array a une taille fixe et ne réalloue jamais de mémoire, par conséquent
data()Le pointeur renvoyé est toujours valide.
Exemple
nous allons le maîtriser en profondeur à travers une série d'exemples.dataUtilisation.
Exemple 1 : Utilisation de base - obtention du pointeur vers le tableau sous-jacent
Exemple
#include <array>
int main() {
// 1. Créer un tableau
std::array<int, 5> numbers = {10, 20, 30, 40, 50};
std::cout << "La taille du tableau est : " << numbers.size() << std::endl;
// 2. Utiliser data pour obtenir le pointeur vers le tableau sous-jacent
int* ptr = numbers.data();
std::cout << "Accès via le pointeur : " << std::endl;
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << "ptr[" << i << "] = " << ptr[i] << std::endl;
}
return 0;
}
Sortie attendue :
array的大小是: 5 通过指针访问: ptr[0] = 10 ptr[1] = 20 ptr[2] = 30 ptr[3] = 40 ptr[4] = 50
Analyse du code :
numbers.data()Renvoie un pointeur vers le premier élément.- Grâce au pointeur renvoyé, tous les éléments sont accessibles en utilisant la syntaxe d'indice de tableau.
Exemple 2 : Modification d'éléments via un pointeur
dataLe pointeur renvoyé peut être utilisé pour modifier des éléments.
Exemple
#include <array>
int main() {
std::array<int, 3> numbers = {10, 20, 30};
std::cout << "Avant modification : ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
// Obtenir le pointeur via data() et modifier des éléments
int* ptr = numbers.data();
ptr[0] = 100;
ptr[1] = 200;
ptr[2] = 300;
std::cout << "Après modification : ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
Sortie attendue :
修改前: 10 20 30 修改后: 100 200 300
Analyse du code :
- Via
data()Le pointeur renvoyé peut directement modifier les données internes du tableau.
Exemple 3 : Interaction avec des API de style C
datal'une de ses principales utilisations est d'interagir avec des fonctions C qui nécessitent des pointeurs de tableau.
Exemple
#include <array>
// Une fonction hypothétique de style C qui calcule la somme d'un tableau
int sumArray(const int* arr, size_t size) {
int sum = 0;
for(size_t i = 0; i < size; ++i) {
sum += arr[i];
}
return sum;
}
int main() {
std::array<int, 5> numbers = {1, 2, 3, 4, 5};
// Utilisez data() pour passer le tableau à une fonction de style C
int total = sumArray(numbers.data(), numbers.size());
std::cout << "Éléments du tableau : ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
std::cout << "Somme : " << total << std::endl;
return 0;
}
Sortie attendue :
数组元素: 1 2 3 4 5 总和: 15
Analyse du code :
numbers.data()Passez le pointeur de tableau interne du tableau aux fonctions qui acceptentconst int*de la fonction.- Cela démontre la capacité du tableau à interagir de manière transparente avec le code C.
autres extensions