std::complex<double> z1 {2, 5}; // 2 + 5i std::complex<double> z; // Default parameter values, are 0 so 0 + 0i它也有拷贝构造函数,因此可以按如下方式复制 z1:
std::complex<double> z2 {z1}; // 2 + 5i显然,我们需要复数常量以及复数对象,命名空间 std::literals::complex_literals 中定义了 3 个运算符函数,在这个命名空间中,命名空间 literals 和 complex_literals 都是内联定义的。在对 std::literals::complex_literals、std::literals 或 std::complex_literals 使用 using 指令之后,就可以访问用于复数常量的运算符函数。假设使用了一个或多个这种指令,并且 using std::complex 对这一节余下的代码都有效。
z = 5.0 + 3i; // z is now complex<double>{5, 3}这展示了如何定义两部分都是非零值的复数,并顺便说明已经为复数对象实现了赋值运算符。可以对 complex<float> 常量使用后缀if,对 complex<long double> 常量使用后缀il,例如 22if 或 3.5il。这些后缀是由函数 operator""if() 和 operator""il() 定义的。注意,不能写成 1.0+i 或 2.0+il,因为这里的 i 和 il 会被解释为变量名,必须写成 1.0 +li 和 2.0+1.0il。
complex<double> z{1.5, -2.5}; // z: 1.5 - 2.5i z.imag(99); // z: 1.5 + 99.0i z.real(-4.5); // z: -4.5 + 99.0i std::cout << "Real part: " << z.real()<< " Imaginary part: " << z.imag()<< std::endl; // Real part: -4.5 Imaginary part: 99real() 和 imag() 接受参数的版本什么都不会返回。
complex<double> z1, z2, z3; // 3 default objects 0+0i std:: cout << "Enter 3 complex numbers: "; std::cin >> z1 >> z2 >> z3; // Read 3 complex numbers std::cout << " z1 = " << z1 <<" z2 = " << z2 << " z3 = "<< z3 << std::endl;下面是示例的输入和输出结果:
Enter 3 complex numbers: -4 (6) (-3, 7)
z1 = (-4,0) z2 = (6,0) z3 = (-3,7)
complex<double> z {1,2}; // 1+2i auto z1 = z + 3.0; // 4+2i auto z2 = z*z + (2.0 + 4i); // -1+8i auto z3 = z1 - z2; // 5-6i z3 /= z2; // 815385-0.523077i注意,复数对象和数值常量之间的运算需要数值常量是正确的类型。不能将整数常量加到 complex<double> 对象上;为了能够进行这个运算,必须写成 2.0。
complex<double> z1 {3,4}; // 3+4i complex<double> z2 {4,-3}; // 4-3i std::cout << std::boolalpha<<(z1 == z2) << " " // false << (z1 != (3.0 + 4i)) << " " // false << (z2 == 4.0 - 3i) << '\n'; // true注释中的结果很清楚。注意在最后一个比较中,编译器会将 4.0-3i 看作复数。
std::cout << std::boolalpha << (std::abs(z1) == std::abs(z2)) // true << " " <<std::abs(z2 + 4.0 + 9i); // 10最后的输出值是 10,因为作为 abs() 的参数的表达式的计算结果是 (8.0+6i);82 和 62 是 100,平方根是 10。
complex<double> zc {0.0, std::acos(-1)}; std::cout << (std::exp (zc) +1.0) << '\n'; // (0, 1.22465e-16) or zero near enoughacos(-1) 是 π,所以这揭示了欧拉方程令人震惊的真相,π 和欧拉数 e 是有关联的:eiπ+1=0。
本文链接:http://task.lmcjl.com/news/15132.html