反向排序容器的推荐方法(例如: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
关键字?
答案 0 :(得分:5)
为什么在std :: greater之后有括号?我们在这里创建一个新的std :: greater对象吗?
这是对的。表达式std::greater<int>()
对应于创建类型为std::greater<int>
的对象。
在这种情况下,为什么我们不需要这里的新关键字?
我们不需要new
关键字,因为对象是在堆栈上创建的,而不是在堆上创建的。只有动态创建的对象才需要在堆上。差异清楚地解释为here。
基本上,在编译时,编译器已经知道要为对象分配多少内存,以及何时应该销毁它(这是std :: sort函数超出范围的时候)。
时应该使用new