如何从矢量初始化valarray?

问题描述:

为了填充矢量的 内容,您可以编写以下内容以确保/安全/良好实践吗?如何从矢量初始化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

是的,这非常好。矢量的内容保证是连续的(参见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