【问题标题】:is_partitioned behavior when no elements satisfy predicate没有元素满足谓词时的 is_partitioned 行为
【发布时间】:2017-04-08 23:06:53
【问题描述】:

看到下面的代码返回真我很惊讶:

bool isSadPancake(char c) { return c == '-'; }

string pancakes = "+++";

bool isParitioned = is_partitioned(pancakes.begin(), pancakes.end(), isSadPancake);

我在网上看到的文档说is_partitioned 如果满足谓词的 [first, last) 范围内的所有元素都出现在所有不满足谓词的元素之前,则返回 true。在这种情况下,不会出现满足谓词的元素,因此我期望返回值为 false。这是预期的行为吗?在标准中的哪里可以找到更多详细信息?

【问题讨论】:

  • 相关参考here.
  • 您的想法中的逻辑错误是“没有满足谓词的元素出现”是不合逻辑的。这不相关;该算法不关心“满足谓词的元素是否出现”。

标签: c++ algorithm stl stl-algorithm


【解决方案1】:

另一种看待它的方式是,满足谓词的所有元素实际上确实出现在不满足谓词的元素之前。全部为零。

一种更好的思考方式是这样的:序列被分割意味着什么?这意味着您应该能够首先找到不满足谓词的元素,然后找到满足的元素。而且你在你的序列中找不到这样的反例。

【讨论】:

    【解决方案2】:

    如果您清楚地阅读了它说的文档 http://en.cppreference.com/w/cpp/algorithm/is_partitioned

    返回值 如果范围 [first, last) 为空或被 p 分区,则为 true。否则为假。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2020-06-18
      相关资源
      最近更新 更多