Комплексные числа в c++
У меня есть функция типа complex, которая возвращает комплексное число. Я хочу вывести результат в виджет Qlabel, однако метод setNum этого не позволяет. Как вывести комплексное число в Qlabel?
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
напишем вот такую страшную функцию
template<typename T>
std::string to_string(std::complex<T> n)
{
return std::to_string(n.real()) + ((n.imag()>=0)?"+":"") + std::to_string(n.imag()) + "i";
}
(ее можно упростить, но это пусть будет домашнее задание)
И теперь можно писать вот так
std::complex<double> z1 = 1-1i;
std::string zs = to_string(z1);
А потом использовать label1.setText(...)
Правда лучше будет переделать исходную функцию на QString
template<typename T>
QString to_string(std::complex<T> n)
{
return QString(n.real()) + ((n.imag()>=0)?"+":"") + QString(n.imag()) + "i";
}
Если же хочется вывода как в стандартной библиотеке (в виде (1,-3) ), то это даже проще
template<typename T>
QString to_string(std::complex<T> n)
{
return QString("(%1,%2)").arg(n.real()).arg(n.imag());
}
P.S. А почему шаблоны? да просто сам тип комплексного числа также шаблонный и что бы не писать на каждый возможный тип свою функцию, воспользуемся шаблонами.