为什么std :: generate可以使用lambda生成器而std :: fill不会?

时间:2012-07-05 12:29:10

标签: c++ std lambda

我偶然发现了这个网站:http://www2.research.att.com/~bs/C++0xFAQ.html#lambda他们解释了 lambda函数 。我试图使用提供的示例,即:

    vector<int> indices( notImportantNumber );
    int count = 0;
    fill(indices.begin(), indices.end(), [&](){ return ++count; });

和类似的

    generate(indices.begin(), indices.end(), [&](){ return ++count; });

虽然,当我尝试使用填充示例时,我仍然会收到此错误:

  

错误1错误C2440:'=':无法从'const转换   `anonymous-namespace'::'to'long'c:\ program files \ microsoft   visual studio 10.0 \ vc \ include \ xutility 2692

任何人都知道为什么会这样?在std::fill()的声明中,没有函子作为最后一个参数。

2 个答案:

答案 0 :(得分:4)

该网站上的错误。 std::fill需要填充值,而不是可调用。

答案 1 :(得分:3)

由于std::fill不期望将functor作为最后一个参数,因此请参阅the reference

  

将给定值分配给[first,last]范围内的元素。

它只需要将一个元素分配给指定范围内的每个项目。