在哪里使用“std::valarray”是个好主意?

Posted

技术标签:

【中文标题】在哪里使用“std::valarray”是个好主意?【英文标题】:Where is it a good idea to use "std::valarray"? 【发布时间】:2017-09-28 08:55:46 【问题描述】:

我在 Nicolai M. Josuttis 所写的 C++ 书中读到了 std::valarray。他在他的书《C++ 标准库》第 17.4 章中写道:

valarray 类的设计不是很好。事实上,没有人 试图确定最终规范是否有效。这 发生是因为没有人对这些课程感到“负责”。这 将 valarrays 引入 C++ 标准库的人离开了 委员会在标准完成之前很久。作为结果, valarray 很少使用。

那么,在哪里使用std::valarray 是个好主意?

【问题讨论】:

我会说“是”,但这是一种观点,就像 Nicolai 写的一样(除了他的可能更重要)。我相信您可以在某处找到它们的合法用例,但在大多数情况下,只是存在更好的替代方案。 ^ --- 我同意,但这并没有使这篇文章不那么基于意见。也许你应该改写? 我认为这个问题可以在某种程度上得到合理的回答,如果它要求使用它的地方是个好主意。不过,我找不到任何东西。 恕我直言,当您需要做一些简单的矢量数学运算时,不要关心性能,也不要依赖于做得更好的库。恕我直言,这种组合相当罕见。 欺骗? ***.com/questions/1602451/c-valarray-vs-vector 【参考方案1】:

创建 Valarray 是为了让编译器可以更快地执行。但是,这些优化可以通过其他方式实现,并且很少使用 valarray。

std::valarray 和帮助类被定义为没有某些形式的别名,因此允许对这些类的操作进行优化,类似于 C 编程语言中关键字限制的效果。此外,允许使用 valarray 参数的函数和运算符返回代理对象,以使编译器可以优化表达式,例如 v1 = av2 + v3;作为执行 v1[i] = av2[i] + v3[i] 的单个循环;避免任何临时或多次通行证。 .....

换句话说,valarrays 应该用在有很多值主要传递给简单表达式的地方。

很少会进一步优化 valarrays,例如英特尔并行工作室。

您可以在cppreference找到更多信息

【讨论】:

以上是关于在哪里使用“std::valarray”是个好主意?的主要内容,如果未能解决你的问题,请参考以下文章

在 url 中使用冒号是个好主意?

在 PHP mkdir 中使用模式 0664 是个好主意吗?

软删除是个好主意吗? [复制]

在 debounce 函数中使用 requestAnimationFrame 是个好主意吗?

将 Couchbase 与 Rails 一起使用是个好主意吗?

(何时)使用 FluentAssertions 是个好主意吗? [关闭]