对于std :: generate,可以传递函数使用索引吗?

pos*_*ich 1 c++ vector

在一个问题中有点难以表达,所以我将使用一个例子.让我们说:

generate(myvec.begin(), myvec.end(), func())
Run Code Online (Sandbox Code Playgroud)

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

int func()
{
   if(index<2)
       return 1;
   else
       return 2;
}
Run Code Online (Sandbox Code Playgroud)

这样的myvec[0]=1, myvec[1]=1, myvec[2]=2, myvec[3]=2,..., myvec[N]=2

Jer*_*fin 6

简短的回答是"不,不是直接".它可以创建自己应该跟踪索引的变量,但是(在这种情况下)根本就没有对索引本身的访问权限.

在这种情况下,我几乎肯定会使用std::fill两次:

std::fill_n(myVec.begin(), 2, 1);
std::fill(myVec.begin()+2, myVec.end(), 2);
Run Code Online (Sandbox Code Playgroud)

更短,更简单.