POD实数和复数向量和数组

时间:2016-12-03 15:52:58

标签: c++ arrays c++11 stl complex-numbers

[克里斯蒂安哈克和巴里指出,之前有一个问题专门针对复杂问题。我的问题更一般,因为它适用于std :: vector,std :: array,以及所有使用allocator的容器类。此外,另一个问题的答案还不够,IMO。也许我可以以某种方式碰到另一个问题。]

我有一个C ++应用程序,它使用大量数组和实数值(双精度)和复数值的向量。我不希望它们初始化为零。嘿编译器和STL! - 只需分配dang内存并完成它。在我身上放置正确的价值观。如果我没有这样做,我希望程序在测试期间崩溃

我设法通过定义一个与POD一起使用的自定义分配器来阻止std :: vector初始化为零。 (有更好的方法吗?)

如何处理std :: complex?它未定义为POD。它有一个默认的构造函数,它会抛出零。所以,如果我写

std::complex<double> A[compile_time_const];
它吐了。

同上

std::array <std::complex<double>, compile_time_constant>;

利用std :: complex&lt;&gt;的最佳方式是什么?功能而不会引发大量的零点?

[编辑]从实值FFT例程中考虑这个实际例子。

{
            cvec Out(N);
            for (int k : range(0, N / 2)) {
                complex Evenk = Even[k];
                complex T = twiddle(k, N, sgn);
                complex Oddk = Odd[k] * T;
                Out[k] = Evenk + Oddk;
                Out[k + N / 2] = Evenk - Oddk; // Note. Not in order
            }
            return Out;
        }

0 个答案:

没有答案