Comment retourner un vecteur à partir d'une fonction en C++
-
Utilisez la notation
vector<T> func()
pour retourner un vecteur à partir d’une fonction -
Utilisez la notation
vector<T> &func()
pour retourner un vecteur à partir d’une fonction
Cet article présentera comment retourner un vecteur à partir d’une fonction efficacement en C++.
Utilisez la notation vector<T> func()
pour retourner un vecteur à partir d’une fonction
Le retour par valeur est la méthode préférée si nous retournons une variable vector
déclarée dans la fonction. L’efficacité de cette méthode provient de sa sémantique des mouvements. Cela signifie que le retour d’un vecteur ne copie pas l’objet, évitant ainsi de perdre de la vitesse/espace supplémentaire. Sous le capot, elle pointe le pointeur vers l’objet vector
renvoyé, ce qui permet d’accélérer l’exécution du programme par rapport à la copie de la structure ou de la classe entière.
#include <iostream>
#include <iterator>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
vector<int> multiplyByFour(vector<int> &arr) {
vector<int> mult;
mult.reserve(arr.size());
for (const auto &i : arr) {
mult.push_back(i * 4);
}
return mult;
}
int main() {
vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
vector<int> arrby4;
arrby4 = multiplyByFour(arr);
cout << "arr - | ";
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, " | "));
cout << endl;
cout << "arrby4 - | ";
copy(arrby4.begin(), arrby4.end(), std::ostream_iterator<int>(cout, " | "));
cout << endl;
return EXIT_SUCCESS;
}
Production:
arr - | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
arrby4 - | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
Utilisez la notation vector<T> &func()
pour retourner un vecteur à partir d’une fonction
Cette méthode utilise la notation par référence, qui est la plus adaptée pour le retour des grandes structures et des classes. Notez que ne retournez pas la référence de la variable locale déclarée dans la fonction elle-même car elle conduit à une référence pendante. Dans l’exemple suivant, nous passons le vecteur arr
par référence et le retournons également comme référence.
#include <iostream>
#include <iterator>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
vector<int> &multiplyByFive(vector<int> &arr) {
for (auto &i : arr) {
i *= 5;
}
return arr;
}
int main() {
vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
vector<int> arrby5;
cout << "arr - | ";
copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, " | "));
cout << endl;
arrby5 = multiplyByFive(arr);
cout << "arrby5 - | ";
copy(arrby5.begin(), arrby5.end(), std::ostream_iterator<int>(cout, " | "));
cout << endl;
return EXIT_SUCCESS;
}
Production:
arr - | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
arrby5 - | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook