STL之complex

Posted jaszzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL之complex相关的知识,希望对你有一定的参考价值。

 

complex是一个类模板,实现了复数;

它有两个private成员变量,一个实部,一个虚部,它们的类型都是_Tp。
complex类中还包括或涉及这些部分:

  • typedef _Tp value_type
  • 构造函数
  • real函数返回实部,imag函数返回虚部
  • 重载了一些数学函数,如abs,log,sqrt等
  • 重载了一些运算符,包括=,+=,-=,*=, /=,+,-,*,/,==,!=,<<,>>

complex类对float,double,long double做了specialization。将_Tp实例化为除float, double,long double之外的类型的行为是未定义的。

#include <iostream>
#include <complex>
 
using namespace std;
 
int main()
{
    #ifndef ONLINE_JUDGE
        //freopen("d:\OJ\uva_in.txt", "r", stdin);
    #endif // ONLINE_JUDGE
    
    complex<double> c1(4.0, 3.0);
    
    complex<float> c2(polar(5.0, 0.75));
    
    cout << "c1:" << c1 << endl;
    cout << "c2:" << c2 << endl;
    // c1:(4,3)
    // c2:(3.65844,3.40819)
    
    cout << "c1:magnitude: " << abs(c1) 
         << " (squred magnitude: " << norm(c1) << ") "
         << " phase angle:" << arg(c1) << endl;
    // c1:magnitude: 5 (squred magnitude: 25)  phase angle:0.643501
          
    cout << "c2:magnitude: " << abs(c2) 
         << " (squared magnitude: " << norm(c2) << ") "
         << " phase angle: " << arg(c2) << endl;
    // c2:magnitude: 5 (squared magnitude: 25)  phase angle: 0.75
 
    cout << "c1 conjugated: " << conj(c1) << endl;
    cout << "c2 conjugated: " << conj(c2) << endl;
    // c1 conjugated: (4,-3)
    // c2 conjugated: (3.65844,-3.40819)
    
    cout << "4.4 + c1 * 1.8:" << 4.4 + c1 * 1.8 << endl;
    // 4.4 + c1 * 1.8:(11.6,5.4)

    cout << "c1 + c2: "
         << c1 + complex<double>(c2.real(), c2.imag()) << endl;
    // c1 + c2: (7.65844,6.40819)

    cout << "c1 += sqrt(c1): " << (c1 += sqrt(c1)) << endl;
    // c1 += sqrt(c1): (6.12132,3.70711)

    return 0;
}

 

以上是关于STL之complex的主要内容,如果未能解决你的问题,请参考以下文章

Swig:在 Python 中使用 c++ STL 复杂

php 168任意代码执行漏洞之php的Complex (curly) syntax

STL之hashtable源代码剖析

将多个输出中的hls属性设置为单独的片段代码

STL源代码剖析——STL算法之set集合算法

STL 之 hash_map源代码剖析