c++ - 为什么 C++ 排序范围是 [first, last)?

标签 c++ algorithm sorting

<分区>

也许他们想帮助我们,考虑到数组从 0 开始。所以我们可能认为如果我们想对前 n 个元素进行排序,我们一直到 v[n] 但实际上我们只到 v [n-1]。这样就可以解释函数排序到最后 - 1 的事实。但在这种情况下,为什么它不从第一个 - 1 开始?在开始时,我们输入 1 并从 v[1] 开始,然后我们输入 n 并在 v[n-1] 处停止。为什么?如果它确实从一个考虑数组,它应该包括最后一个元素。这些只是我的——可能是愚蠢的——想法?这就是为什么我希望得到真实的解释。谢谢!

编辑:非常感谢大家的回答。我可以看到有很多优点,在这个范围内一切看起来都比较正常。我会尽量记住你所有的例子,以便在我的脑海中清晰地表达出来。

最佳答案

这样做是为了与标准 C++ 库的所有容器中的迭代器语义保持一致:begin() 始终包含在内,而 end() 始终是排他的,因为它“指向”容器结束后的位置。

这与指向数组元素的指针的行为一致:

int data[SIZE];
int *begin = data;      // Inclusive
int *end = &data[SIZE]; // Exclusive

关于c++ - 为什么 C++ 排序范围是 [first, last)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49679038/

相关文章:

c++ - 添加插件 SDK - 是否多重继承?

javascript - 为什么在这种情况下排序会修改原始内容?

c++ - 如何使用带有重载函数的#pragma startup?

c++ - 将大型成员对象移出类?

c++ - SFINAE : What is happening here?

c# - 使用 ObjectListView 自定义排序

php - 重新排序数据库结果

python - 用于圆检测的最小二乘法

javascript - 如何解决可视化算法的问题

algorithm - Lua 中的 Bentley-Ottmann 算法