2013-07-02 163 views
1

我做一个非零值以下:初始化双阵列

double dVar[100] = { 0.1 }; 

但是,当我调试,它只把0.1〜DVAR [0]和其余全部都是0.0;

我只是想避免for循环。

有人可以帮我吗?

回答

4

但是,当我调试时,它只会把0.1的dVar [0]和其余的都是0.0;

这是预期的行为。如果初始值设定项包含的元素数少于聚集值(数组),则对其余元素执行value-initialization,在这种情况下将其设置为零。

虽然未初始化,以避免明确手工编码的循环使用std::fill()

double dVar[100]; 
std::fill(std::begin(dVar), std::end(dVar), 0.1); 

正如他的回答提出的Olaf Dietsche,从一个数组更改为std::vector<double>将允许初始化为零以外的值。如果std::vector可以更改大小这一事实是不可取的,并且您的编译器有一些C++ 14功能,您可能需要考虑使用std::dynarray。这是不可能改变的dynarray元素的数量和所有元素可以在初始化为零以外的值,类似被分配到std::vector

std::dynarray<double> dVar(100, 0.1); 
+0

谢谢你们,它工作。 –

4

这是正常现象。如果您没有明确初始化数组的所有元素,它们将自动设置为零。

初始化所有元素0.1,你可以使用一个std::vector,并使用一个构造函数显式初始化

std::vector dVar(100, 0.1); 

这将创建100个元素,都设置为0.1的向量。