为了用依赖于它们的索引的值填充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);});
}
最佳答案
您可以将索引移到lambda捕获中,并使lambda可变,如下所示(需要C++ 14):
std::generate_n(std::back_inserter(lst), N,
[&func, idx = -1] () mutable {idx++; return func(idx);});
现在,您可以省略
int idx = -1;
行。不过,可能会有更好的解决方案,因为牺牲闭包的默认const限定条件只是将整数声明从周围的作用域移到捕获中并不完美。不过,idx
的范围已缩小,如果我正确理解您的问题,那就是目标。关于c++ - 如何通过generate_n以索引增量填充STL容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51281425/