2013-07-02 218 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的向量。