HOWTO · C++
Accedi alle funzioni dei membri dal puntatore a un vettore in C++
In questo articolo viene illustrato come accedere alle funzioni membro dal puntatore a un vettore C++
Questo articolo spiegherà diversi metodi su come accedere alle funzioni membro da un puntatore a un vettore in C++.
Usa la notazione -> per accedere alle funzioni dei membri dal puntatore a un vettore
Le funzioni membro vector possono essere chiamate dal puntatore al vettore con l’operatore ->. In questo caso, stiamo passando il puntatore al vettore a una funzione diversa. Come funzioni membro, è necessario accedere a qualsiasi membro dati della struct /class usando la notazione ->. Notare che, quando si passa il puntatore all’oggetto alla diversa funzione, l’indirizzo dell’operatore (->) deve essere utilizzato prima della variabile.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> *vec) {
for (auto i = 0; i < vec->size(); ++i) {
cout << vec->at(i) << "; ";
}
cout << endl;
}
int main() {
vector<string> str_vec = {"bit", "nibble", "byte", "char",
"int", "long", "long long", "float",
"double", "long double"};
printVectorElements(&str_vec);
return EXIT_SUCCESS;
}
Produzione:
bit; nibble; byte; char; int; long; long long; float; double; long double;
Usa la notazione (*)vector.member per accedere alle funzioni dei membri dal puntatore a un vettore
L’accesso al valore puntato dal puntatore avviene tramite un’operazione di dereferenziazione, che può sostituire funzionalmente l’operatore -> e migliorare la leggibilità. L’espressione (*vec).at(i) può essenzialmente eseguire la stessa operazione di accesso ai membri. Nota che stiamo usando il modello di funzione che può stampare un vettore con elementi di tipo generico.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> *vec) {
for (auto i = 0; i < (*vec).size(); ++i) {
cout << (*vec).at(i) << "; ";
}
cout << endl;
}
int main() {
vector<string> str_vec = {"bit", "nibble", "byte", "char",
"int", "long", "long long", "float",
"double", "long double"};
printVectorElements(&str_vec);
return EXIT_SUCCESS;
}
Produzione:
bit; nibble; byte; char; int; long; long long; float; double; long double;
In alternativa, supponiamo che il puntatore al vettore sia allocato usando la chiamata di funzione new, e la variabile non sia passata alla funzione diversa. In tal caso, possiamo scegliere una qualsiasi delle notazioni precedenti. Nell’esempio seguente, dimostriamo l’iterazione dell’elemento vettoriale e l’operazione di output utilizzando l’operatore ->.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> *vec) {
for (auto i = 0; i < vec->size(); ++i) {
cout << vec->at(i) << "; ";
}
cout << endl;
}
int main() {
auto *i_vec = new vector<int>(10);
printVectorElements(i_vec);
for (int i = 0; i < 10; ++i) {
i_vec->at(i) = i + 1;
cout << i_vec->at(i) << "; ";
}
cout << endl;
return EXIT_SUCCESS;
}
Uscita (se l’ingresso è +):
0; 0; 0; 0; 0; 0; 0; 0; 0; 0;
1; 2; 3; 4; 5; 6; 7; 8; 9; 10;