【发布时间】:2010-12-16 13:53:34
【问题描述】:
标准库中是否有一种算法可以为 std::vector 的每个元素添加一个值? 类似的东西
std::vector<double> myvec(5,0.);
std::add_constant(myvec.begin(), myvec.end(), 1.);
将值 1.0 添加到每个元素?
如果在 STL 中没有很好的(例如简短、美观、易于阅读)的方式来执行此操作,那么 boost 怎么样?
【问题讨论】:
-
感谢您的快速回答 - 我编辑了这个问题以更好地代表我真正在寻找的东西 - 一种易于阅读的便携方式来实现这一目标
-
到目前为止,您的任何一个答案都适用于任何符合 C++03 的编译器。我认为
std::add_constant不存在的原因是因为它很容易编写你自己的。 C++ 不是函数式语言,所以做这样的事情有点笨拙。 -
@Kristo,是的,自己写很容易,但你自己写的不会很快。我正在寻找类似于 BLAS 功能的东西:一个易于阅读的界面隐藏了一个复杂的算法,例如可能使用多线程或其他功能。
-
对于大型向量,它可能比手动滚动的
for循环更快,这要归功于编译器内联。要并行化“为每个元素加 1”操作,您将需要一个单独的库或针对您的硬件调整的自定义解决方案。请记住:确保在确定它太慢之前对其进行概要分析。 -
你应该看看 boost 中的 uBlas 库,boost.org/doc/libs/1_45_0/libs/numeric/ublas/doc/index.htm,也许你会在那里找到有用的东西......