Namespaces
Variants

operator<<,>> (std::complex)

From cppreference.net
Défini dans l'en-tête <complex>
template < class T, class CharT, class Traits >

std:: basic_ostream < CharT, Traits > &

operator << ( std:: basic_ostream < CharT, Traits > & os, const std:: complex < T > & x ) ;
(1)
template < class T, class CharT, class Traits >

std:: basic_istream < CharT, Traits > &

operator >> ( std:: basic_istream < CharT, Traits > & is, std:: complex < T > & x ) ;
(2)
1) Écrit dans os le nombre complexe sous la forme ( real, imaginary ) .
2) Lit un nombre complexe depuis is . Les formats pris en charge sont
  • real
  • ( real )
  • ( real, imaginary )

où l'entrée pour real et imaginary doit être convertible en T .

Si une erreur survient, appelle is. setstate ( ios_base :: failbit ) .

Table des matières

Exceptions

Peut lever std::ios_base::failure en cas d'erreurs de flux.

Paramètres

os - un flux de sortie de caractères
is - un flux d'entrée de caractères
x - le nombre complexe à insérer ou extraire

Valeur de retour

1) os
2) is

Notes

1) Comme la virgule peut être utilisée dans les paramètres régionaux actuels comme séparateur décimal, la sortie peut être ambiguë. Ceci peut être résolu avec std::showpoint qui force le séparateur décimal à être visible.
2) La saisie est effectuée sous forme d'une série d'extractions formatées simples. La gestion des espaces blancs est identique pour chacune d'entre elles.

Implémentation possible

template<class T, class CharT, class Traits>
basic_ostream<CharT, Traits>&
    operator<<(basic_ostream<CharT, Traits>& o, const complex<T>& x)
{
    basic_ostringstream<CharT, Traits> s;
    s.flags(o.flags());
    s.imbue(o.getloc());
    s.precision(o.precision());
    s << '(' << x.real() << ',' << x.imag() << ')';
    return o << s.str();
}

Exemple

#include <complex>
#include <iostream>
int main()
{
    std::cout << std::complex<double> {3.14, 2.71} << '\n';
}

Sortie possible :

(3.14,2.71)