2014-12-02 130 views
2

爲了填充矢量的 內容,您可以編寫以下內容以確保/安全/良好實踐嗎?如何從矢量初始化valarray?

vector<int> myVect = {2,0,1,0,0,1,1,0,0,0}; // Any vector 
valarray<int> myVala (&(myVect[0]), myVect.size()); 
//Edit: as suggested by Xeo, this code looks much cleaner (C++11) 
valarray<int> myVala (myVect.data(), myVect.size()); 

它似乎工作正常,但我想確保它適用於任何情況。

+0

這些天來,我會質疑使用'valarray'是否是好的做法。這是標準庫的害羣之馬。 – 2014-12-02 12:54:52

+0

這是爲什麼?我打算使用它們來選擇掩碼和切片的子集。我對這個結構並不熟悉,但一見成效。 – wxc3 2014-12-02 15:22:42

+0

它只是從未受歡迎。大多數實現實際上並沒有得到很好的優化,這就影響了它的使用。這有點雞與雞蛋的情況。 – 2014-12-02 15:46:50

回答

3

是的,這非常好。矢量的內容保證是連續的(參見C++標準中的[vector.overview], §1)。

請注意,自C++ 11以來,您可以直接使用初始化程序列表初始化valarray

+1

更好一點(除了初始列表,如果數據來自其他地方):'std :: valarray vla(vec.data(),vec.size())' – Xeo 2014-12-02 12:59:28

+0

這實際上更具可讀性.data(),我編輯了我的消息以包含這個表示法。 – wxc3 2014-12-02 15:43:11