Шаг 418.
Библиотека STL.
Числовые типы. Операции над комплексными числами. Операции ввода-вывода

    На этом шаге мы рассмотрим особенности использования операций ввода-вывода.

    В классе complex определены стандартные операторы ввода-вывода << и >> (таблица 1).

Таблица 1. Операции ввода-вывода класса complex<>
Выражение Описание
strm << с Записывает комплексное число с в выходной поток данных strm
strm >> с Читает комплексное число с из входного потока данных strm

    Оператор >> выводит комплексное число в поток данных в следующем формате:

  (вещественная_часть, мнимая_часть)

    Эквивалентная реализация оператора вывода выглядит так:

  template <class T, class charT, class traits> 
  std::basic_ostream<charT,traits>& 
  operator<< (std::basic_ostream<charT,traits>& strm, 
                     const std::complex<T> c)
  {
    // Временная строка для выполнения вывода с одним аргументом 
    std::basic_ostringstream<charT,traits> s;
    s.flags(strm,flags());         // Копирование флагов потока 
    s.imbue(strm,getloc());        // Копирование локального контеста потока 
    s.precision(strm.precision()); // Копирование точности потока
    // Подготовка итоговой строки
    s <<  '(' << с.real() << '.' << c.imag() << ')';
    // Вывод итоговой строки 
    strm << s.str();
    return strm; 
  }

    Оператор ввода читает комплексные числа в одном из представленных ниже форматов:

  (вещественная_часть, мнимая_часть) 
  (вещественная_часть) 
  вещественная_часть

    Если очередные символы во входном потоке данных не соответствуют ни одному из перечисленных форматов, устанавливается флаг ios::failbit, что может привести к соответствующему исключению.

    К сожалению, вы не можете задать собственный разделитель для вещественной и мнимой частей комплексного числа. А это означает, что при использовании запятой в качестве "десятичной точки" (как, например, в Германии или России) вводимые/выводимые данные выглядят довольно странно. Например, комплексное число с вещественной частью 4.6 и мнимой частью 2.7 записывается в виде: (4,6,2,7).

    Примеры использования операций ввода-вывода приведены в 411 и 412 шагах.

    На следующем шаге мы рассмотрим трансцендентные функции.




Предыдущий шаг Содержание Следующий шаг