gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:12 32 4
gpt4 key购买 nike

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

最佳答案

Why are there parentheses after std::greater there? Are we creating a new std::greater object here?

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

In that case, why don't we need the new keyword here?

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

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

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

关于c++ - 在 C++ 中调用 std::sort 时使用 std::greater 的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046760/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com