我试图找出以下之间的区别:
return std::adjacent_find(v.begin(), v.end(), std::not_equal_to<>()) == v.end();
Run Code Online (Sandbox Code Playgroud)
和
return std::equal(v.begin() + 1, v.end(), v.begin());
Run Code Online (Sandbox Code Playgroud)
后者有点短,所以我更喜欢这样写,我发现的唯一区别是它因空数组而崩溃。速度大致相等。
我的直接建议是避免这两种情况。也不能很好地告知读者你的意图。我可能会使用更像这样的东西:
return std::all_of(v.begin(), v.end(),
[&](auto const &i) { return i == v.front(); });
Run Code Online (Sandbox Code Playgroud)
至少对我来说,这似乎使意图更加明显(这比源代码的字节数重要得多)。
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |