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

时间:2013-08-04 19:30:03

标签: c++ stl std

反向排序容器的推荐方法(例如: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关键字?

1 个答案:

答案 0 :(得分:5)

  

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

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

  

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

我们不需要new关键字,因为对象是在堆栈上创建的,而不是在堆上创建的。只有动态创建的对象才需要在堆上。差异清楚地解释为here

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

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