Namespaces
Variants

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

From cppreference.net
Definido en el encabezado <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) Escribe en os el número complejo en la forma ( real, imaginary ) .
2) Lee un número complejo desde is . Los formatos admitidos son
  • real
  • ( real )
  • ( real, imaginary )

donde la entrada para real y imaginary debe ser convertible a T .

Si ocurre un error, llama a is. setstate ( ios_base :: failbit ) .

Contenidos

Excepciones

Puede lanzar std::ios_base::failure en errores de flujo.

Parámetros

os - un flujo de salida de caracteres
is - un flujo de entrada de caracteres
x - el número complejo a insertar o extraer

Valor de retorno

1) os
2) is

Notas

1) Dado que la coma puede utilizarse en la configuración regional actual como separador decimal, la salida puede resultar ambigua. Esto puede resolverse con std::showpoint que fuerza a que el separador decimal sea visible.
2) La entrada se realiza como una serie de extracciones formateadas simples. El salto de espacios en blanco es el mismo para cada una de ellas.

Implementación posible

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();
}

Ejemplo

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

Salida posible:

(3.14,2.71)