在 C++ 中调用 std::sort 时使用 std::greater 的语法

2024-01-12

推荐的方式(例如:按降序对向量进行排序 https://stackoverflow.com/questions/9025084/sorting-a-vector-in-descending-order)对容器进行反向排序似乎是:

std::sort(numbers.begin(), numbers.end(), std::greater<int>());

我知道第三个参数是一个函数或一个函子,可以帮助 sort() 进行比较,而 std::greater 是一个模板函子,但我不明白这里发生了什么。我的 C++ 很生疏,所以如果这些是愚蠢的问题,请耐心等待:为什么后面有括号std::greater<int>那里?我们是否正在创建一个新的std::greater在这里反对?在这种情况下,我们为什么不需要new关键字在这里?


为什么 std::greater 后面有括号?我们在这里创建一个新的 std::greater 对象吗?

这是正确的。表达方式std::greater<int>()对应于创建类型的对象std::greater<int>.

既然如此,为什么我们不需要 new 关键字呢?

我们不需要new关键字,因为对象是在堆栈上创建的,而不是在堆上。只有动态创建的对象才需要位于堆上。差异已清楚解释here https://stackoverflow.com/questions/655065/when-should-i-use-the-new-keyword-in-c.

基本上,在编译时,编译器已经知道要为对象分配多少内存,以及何时应销毁该对象(即 std::sort 函数超出范围时)。new应该在任何时候使用

  • 这些信息不可用——一个简单的例子是当你想创建一个对象数组,但你不知道有多少个对象,直到程序实际运行;和/或
  • 你希望物体有执着的存储持续时间,即您希望对象的生命周期超过创建它的范围的生命周期。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中调用 std::sort 时使用 std::greater 的语法 的相关文章

随机推荐