如何从向量初始化 valarray?
Posted
技术标签:
【中文标题】如何从向量初始化 valarray?【英文标题】:How do I initialize a valarray from a vector? 【发布时间】:2014-12-02 12:48:15 【问题描述】:编写以下内容是否可以/安全/良好的做法以便用 向量的内容?
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() );
它似乎工作正常,但我想确保它适用于任何情况。
【问题讨论】:
这些天来,我会质疑使用valarray
是否是一种好习惯。它是标准库的害群之马。
这是为什么呢?我打算用它们来选择带有掩码和切片的子集。我不熟悉这种结构,但乍一看似乎很有用。
它从未流行过。大多数实现实际上都没有得到很好的优化,这违背了使用它的意义。这有点像先有鸡还是先有蛋的情况。
【参考方案1】:
是的,这很好。 vector 的内容保证是连续的(参见 C++ 标准中的[vector.overview], §1
)。
请注意,从 C++11 开始,您可以直接使用初始化列表初始化 valarray
。
【讨论】:
会更好一点(除了初始化列表,如果数据来自其他地方):std::valarray<int> vla(vec.data(), vec.size())
使用 .data() 确实更具可读性,我编辑了我的消息以包含此符号。以上是关于如何从向量初始化 valarray?的主要内容,如果未能解决你的问题,请参考以下文章