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

sun*_*ica 4 c++ stl std

对反向排序容器的推荐方法(例如:按降序排序向量)似乎是:

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

我理解第三个参数是一个函数或函数,它帮助sort()进行比较,而std :: greater是一个模板函子,但我不明白这里发生了什么.我的C++非常生疏,如果这些都是愚蠢的问题,请耐心等待:为什么那之后std::greater<int>有括号?我们std::greater在这里创建一个新对象吗?在这种情况下,为什么我们不需要new这里的关键字?

mad*_*tya 6

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

那是对的.表达式std::greater<int>()对应于创建类型的对象std::greater<int>.

在这种情况下,为什么我们不需要这里的新关键字?

我们不需要new关键字,因为对象是在堆栈上创建的,而不是在堆上创建的.只有动态创建的对象才需要在堆上.所不同的是明确解释这里.

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

  • 这个信息不可用 - 一个简单的例子是你想要创建一个对象数组,但是你不知道有多少个对象,直到程序实际运行; 和/或
  • 您希望对象具有持久存储持续时间,即您希望对象的持续时间超过创建它的范围的生命周期.