本文介绍了对于 std::generate,传递的函数可以使用索引吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一个问题中有点难以表达,所以我会举一个例子.假设我愿意:

A little hard to phrase in a question so I will use an example. Lets say I do:

generate(myvec.begin(), myvec.end(), func())

我可以拥有它以便 func() 可以读取生成的索引吗:

Can I have it so that func() can read the index that generate is up to such that:

int func()
{
   if(index<2)
       return 1;
   else
       return 2;
}

使得 myvec[0]=1, myvec[1]=1, myvec[2]=2, myvec[3]=2,..., myvec[N]=2?

推荐答案

是的,如果你使用一个函数对象作为生成器(正如 juan 指出的,这个解决方案是否能被标准保证工作是有问题的!谨慎行事并使用 Jerry 的方法.):

Yes, if you use a function object as the generator (as juan points out, it is questionable whether this solution is guaranteed to work by the standard! Exercise caution and use Jerry's method.):

class mygenerator {
 public:
  mygenerator() : hits(0) {}

  int operator()() {
      hits++;
      return (hits <= 2 ? 1 : 2);
  }

 private:
  int hits;
}

...

mygenerator mg1;
std::generate(myvec.begin(), myvec.end(), mg1);

这篇关于对于 std::generate,传递的函数可以使用索引吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-29 12:19