Je vis de créer une fonction C ++ qui prend un paramètre vecteur et, indépendant sur le type indiqué au vecteur, imprimez le contenu du vecteur sur un, à côté de l'autre. Le code ci-dessous fonctionne pour les vecteurs de type Quel changement dois-je faire pour le faire fonctionner avec n'importe quel type de vecteur? P> < / p>
3 Réponses :
simple: faites-en une fonction de modèle. Aussi, vous devriez passer le vecteur de (const) Référence pour éviter des copies inutiles.
template<typename T, typename Allocator> void PrintVect(const std::vector<T, Allocator> &vect) { for (const auto &i : vect) std::cout << i; }
Cela suppose bien sûr qu'il existe un opérateur approprié << () code> surcharge pour diffuser un
t code> à un
std :: ostream code>. Pour les types fondamentaux (
INT CODE>, etc.) et des types - Tous types de la bibliothèque standard, cette hypothèse est vraie. Pour les types pour lesquels il n'est pas vrai, une telle solution ne compilera pas. Il n'a pas de sens de pouvoir diffuser tous les types afin qu'il soit nécessaire de mettre en œuvre délibérément une capacité de diffusion en continu lorsqu'il est nécessaire.
@Peter j'ai senti que c'était impliqué par le mot "print"
Vous pouvez cependant définir un Fonction de modèle qui prend le type d'élément du vecteur comme paramètre de modèle; Par cela, le compilateur générera automatiquement une fonction d'impression dédiée pour chaque type d'élément que vous utilisez réellement: p> notez le vecteur
vecteur
const code> et le
& code> dans
void printVect (const vecteur
const & code>. p> p>
Vous pouvez créer une fonction de modèle qui créera en effet une copie de la fonction pour chaque #include <iostream>
#include <vector>
template<typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& vect) {
for(const auto& val : vect)
os << val;
return os;
}
int main() {
std::vector<int> nums = {1, 2, 3};
std::cout << nums << "\n";
}