6

为什么 std::greater 不再是 Visual Studio 2012 中 std 命名空间的一部分?我现在需要包括<functional>

我认为 STL 库在工具集中保持不变

4

2 回答 2

17

为什么 std::greater 不再是 Visual Studio 2012 中 std 命名空间的一部分?

如果是这样的话,我会感到非常惊讶。

我现在需要包括<functional.h>

不,您需要包含<functional>,因为这是定义所有标准函数对象的标头,包括greater.

我认为 STL 库在工具集中保持不变

他们应该是。但是标题可以包含其他标题,因此有时即使您没有包含正确的标题,您也会发现某些内容可用。但是你不能依赖它,就像你在这里找到的那​​样。始终包含您使用的东西所需的所有标题。

于 2013-05-15T14:30:39.527 回答
2

以下示例取自此处,在 Visual Studio 2012 中为我正确编译和执行:

// greater example
#include <iostream>     // std::cout
#include <functional>   // std::greater
#include <algorithm>    // std::sort

int main () {
  int numbers[]={20,40,50,10,30};
  std::sort (numbers, numbers+5, std::greater<int>());
  for (int i=0; i<5; i++)
    std::cout << numbers[i] << ' ';
  std::cout << '\n';
  return 0;
}

输出:

50 40 30 20 10

根据问题评论和上面的示例,您需要包含<functional>,而不是<functional.h>

于 2013-05-15T14:29:15.607 回答