没有元素满足谓词时的is_partitioned行为

时间:2017-04-08 23:06:53

标签: c++ algorithm stl stl-algorithm

我很惊讶地看到以下代码返回true:

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

string pancakes = "+++";

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

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

2 个答案:

答案 0 :(得分:4)

另一种看待它的方式是,满足谓词的所有元素实际上都出现在那些没有这样做的元素之前。全部为零。

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

答案 1 :(得分:0)

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

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