Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | numeric‎ | complex
 
 
 
 
Definiert in der Header-Datei <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) Schreibt die komplexe Zahl im Format (real, imaginary) nach os.
2) Liest eine komplexe Zahl aus is. Die unterstützten Formate sind
  • real
  • (real)
  • (real, imaginary)

wobei die Eingabe für real und imaginary in T konvertierbar sein muss.

Wenn ein Fehler auftritt, wird is.setstate(ios_base::failbit) aufgerufen.

Inhalt

[bearbeiten] Ausnahmen

Kann std::ios_base::failure bei Stream-Fehlern auslösen.

[bearbeiten] Parameter

os - ein Zeichen-Ausgabestrom
ist - ein Zeileneingabestrom
x - die einzufügende oder zu extrahierende komplexe Zahl

[bearbeiten] Rückgabewert

1) os
2) is

[bearbeiten] Hinweise

1) Da das Komma im aktuellen Gebietsschema als Dezimaltrennzeichen verwendet werden kann, kann die Ausgabe mehrdeutig sein. Dies kann mit std::showpoint gelöst werden, das erzwingt, dass das Dezimaltrennzeichen sichtbar ist.
2) Die Eingabe erfolgt als eine Reihe von einfachen formatierten Extraktionen. Das Überspringen von Leerzeichen ist für jede davon gleich.

[bearbeiten] Mögliche Implementierung

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

[bearbeiten] Beispiel

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

Mögliche Ausgabe

(3.14,2.71)