将double数组初始化为非零值

时间:2013-07-02 09:21:13

标签: c++ visual-studio-2010 visual-c++

我正在做以下事情:

double dVar[100] = { 0.1 };

但是当我调试时,它只将0.1放到dVar [0]并且其余都是0.0;

我只是想避免使用for循环。

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:4)

这是预期的行为。如果没有显式初始化数组的所有元素,它们将自动设置为零。

要将所有元素初始化为0.1,您可以使用std::vector并使用具有显式初始化的构造函数

std::vector dVar(100, 0.1);

这将创建一个包含100个元素的向量,所有元素都设置为0.1。