要使用依赖于索引的值填充STL容器,我通常会像下面的代码一样编写.在没有声明索引的情况下有没有办法做同样的事情?
int main(){
static int N=10;
auto func = [](int idx){return idx*(idx+1)+1;};
int idx = -1;
std::list<int> lst;
std::generate_n(std::back_inserter(lst), N, [&](){idx++; return func(idx);});
}
Run Code Online (Sandbox Code Playgroud)
您可以将索引移动到lambda捕获并使lambda像这样可变(需要C++ 14):
std::generate_n(std::back_inserter(lst), N,
[&func, idx = -1] () mutable {idx++; return func(idx);});
Run Code Online (Sandbox Code Playgroud)
现在你可以省略该行int idx = -1;.可能有一个更好的解决方案,因为牺牲闭包的默认const限定只是为了将一个整数声明从周围的范围移动到捕获中并不完美.尽管如此,范围idx已经缩小,如果我理解你的问题,这就是目标.