范围的递归函数(来自范围-v3)导致编译分歧:为什么?

时间:2017-06-21 18:26:51

标签: c++ recursion range-v3

出于某种原因,下面列表中的代码会导致clang ++和g ++使用100%的CPU,并填满内存直到我的系统挂起。

请注意,这是一个谈话的玩具示例。我知道GETString str = "/property/33951?year=2017&taxType=RE"; Pattern pattern = Pattern.compile("(\\?|\\&)([^=]+)=([^&]+)"); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.group(2) + " = " + matcher.group(3)); } 是执行此操作的标准方法,但此代码是推理链中的中间点。

accumulate

transform函数用于实现一个递归,该递归采用一系列整数和一元函数,将元素按元素应用于范围,并生成映射元素的总和。

我有两个问题:(1)发散行为的原因是什么,以及(2)我应该如何制作和传递尾部视图以使编译不会崩溃?

1 个答案:

答案 0 :(得分:2)

Jarod42指出了这个问题,但解决方案非常简单。您需要一个可以占用任何范围的类型删除视图。幸运的是,such a thing exists。将您的代码更改为:

func plusBtnClicked(_ sender: AnyObject?) {
  score += 1
  self.tableView.reloadData()
}

func minusBtnClicked(_ sender: AnyObject?) {
  score -= 1
  self.tableView.reloadData()
}

这打印285。