推荐的方式(例如:按降序对向量进行排序 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(使用前将#替换为@)