[克里斯蒂安哈克和巴里指出,之前有一个问题专门针对复杂问题。我的问题更一般,因为它适用于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;
}