为了用依赖于它们的索引的值填充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/

10-13 05:55