Surcharger l'opérateur << pour la classe valarray
Résolu
A voir également:
- Surcharger l'opérateur << pour la classe valarray
- Télécharger opera mini pour pc - Télécharger - Navigateurs
- Opérateur de réseau mobile - Guide
- 0466 quel opérateur - Forum Mobile
- 0668 quel opérateur ✓ - Forum Mobile
- 0758 quel opérateur - Forum Opérateurs & Réseaux mobiles
7 réponses
je suppose que tu as essayé :
ça donne quoi ?
template <class ostream,typename _T>ostream& operator<<(ostream& os,valarray<_T>>;
ça donne quoi ?
cooooool, ça marche trés bien meric char snipeur :)
Résultat : 10 20 30 40
#include <iostream> #include <valarray> using namespace std; template <class ostream,typename _T> ostream& operator<<(ostream& os,valarray<_T> array) { for ( int i(0); i < array.size(); i++) { os << array[i] << " "; } return os; } int main () { int init[]= {10,20,30,40}; valarray<int> foo (init, 4); // 10 20 30 40 cout << foo.size() << endl; cout << foo << endl; return 0; }
Résultat : 10 20 30 40
À mon avis il vaudrait mieux écrire
En effet :
- pas besoin de résolution template pour le ostream : si on regarde les classes C++ std::ofstream, std::ostringstream, elles héritent toutes de std::ostream. De std::cout ou std::cerr sont des std::ostream.
- la solution proposée repose sur un passage par recopie, bien plus coûteux qu'un passage par référence
Bonne chance
#include <ostream> template <typename T> std::ostream & operator << ( std::ostream & oss, const valarray<T> > & x ) { for(std::size_t i = 0; i < x.size(); ++i) { oss << x[i] << ' '; } return oss; }
En effet :
- pas besoin de résolution template pour le ostream : si on regarde les classes C++ std::ofstream, std::ostringstream, elles héritent toutes de std::ostream. De std::cout ou std::cerr sont des std::ostream.
- la solution proposée repose sur un passage par recopie, bien plus coûteux qu'un passage par référence
Bonne chance
je l'ai essayé et ça marche nickel , juste j'ai un petit probléme qui est le suivant .
quand je mets cout << exp(foo) << endl; et on ne pas oubliant #include <cmath>
le compilateur hurle on me mettant une dizaine de ligne depuis depuis /usr/include /c++ . et merci encore pour ta réponse .
quand je mets cout << exp(foo) << endl; et on ne pas oubliant #include <cmath>
le compilateur hurle on me mettant une dizaine de ligne depuis depuis /usr/include /c++ . et merci encore pour ta réponse .
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sans le message d'erreur ni le code c'est dur de répondre. C'est probablement que l'opérateur << n'est pas défini pour les opérandes auxquelles tu l'appliques. Normalement dans ce cas de figure, le compilateur te dit quels opérateurs << sont à ta disposition.
Autre précision, n'oublie pas que les fonctions/classes/structures templates doivent être implémentées dans un .hpp (sinon elles ne sont utilisables que dans le cpp dans lequel tu les as implémentées).
Autre précision, n'oublie pas que les fonctions/classes/structures templates doivent être implémentées dans un .hpp (sinon elles ne sont utilisables que dans le cpp dans lequel tu les as implémentées).
Bonjour, c'est le même code que j'ai écrit en haut sauf que j'ai les changer par ta dernière instructions, du coup tout le code marche nickel sauf qu'on je lui dit de m'affficher par exemple cout << exp(foo) << endl; mais qu'on je lui mets
bar = exp(foo); et après cout << bar << endl; il y'a pas de probléme .
voila ce qu'il me mets comme erreur :
lien ----> http://img688.imageshack.us/img688/8075/erreursj.png
bar = exp(foo); et après cout << bar << endl; il y'a pas de probléme .
voila ce qu'il me mets comme erreur :
lien ----> http://img688.imageshack.us/img688/8075/erreursj.png
Je suppose que tu te bases sur cette exemple ?
http://www.cplusplus.com/reference/valarray/exp/
Du coup le code serait :
Sortie :
Bonne chance
http://www.cplusplus.com/reference/valarray/exp/
Du coup le code serait :
#include <iostream> #include <cmath> #include <valarray> #include <ostream> template <typename T> std::ostream & operator << ( std::ostream & out, const std::valarray<T> & x ) { out << "[ "; for (std::size_t i = 0; i < x.size(); ++i) { out << x[i] << ' '; } out << ']'; return out; } int main () { double val[] = {1.1, 2.2, 4.4, 8.8}; std::valarray<double> foo(val, 4); std::valarray<double> bar = exp(foo); std::cout << "foo: " << foo << std::endl << "bar: " << bar << std::endl; return 0; }
Sortie :
foo: [ 1.1 2.2 4.4 8.8 ] bar: [ 3.00417 9.02501 81.4509 6634.24 ]
Bonne chance