处理 Valarray

Posted

技术标签:

【中文标题】处理 Valarray【英文标题】:Processing Valarrays 【发布时间】:2020-05-11 21:44:15 【问题描述】:

提前感谢您的关注。

所以我正在处理来自 STL 的 valarray,我对使用闭包捕获值感到好奇。

为什么我不能通过引用传递值。以下面的代码为例:

#include <iostream>
#include <valarray>
#include <functional>



int main()


    std::valarray<int>arr=1,2;
    std::valarray<int>arr2;


    arr2=arr.apply([](int a)return a+=2;); 

      /* arr2=arr.apply([&](int a)return a+=2;); 
   error: no matching for call to std::valarray<int>::apply(main()::<lambda(int)> */


    for(int x: arr2)
        std::cout<<x;
    

    return 0;

谢谢!

【问题讨论】:

【参考方案1】:

与几乎所有其他采用谓词或其他可调用对象形式的标准库函数不同,std::valarray&lt;T&gt;::apply 函数实际上只接受一个指向函数的实际指针,而不使用模板来接受任何可调用对象。

无捕获的 lambda 可以转换为指向函数的指针,就像 apply 函数需要的那样。但是如果你在你的 lambda 中使用捕获,那就不可能了。

【讨论】:

以上是关于处理 Valarray的主要内容,如果未能解决你的问题,请参考以下文章

自然语言处理_一般处理流程

怎么在批处理中加回车命令?

throws关键字_异常处理的第一种方式(交给别人处理)和try_catch_异常处理的第二种方式(自己处理)

PHP异常处理

协处理器,王明学learn

批处理学习笔记第一课:什么是批处理