为什么count_if()在没有算法标题的情况下工作?

时间:2014-05-22 18:57:46

标签: c++ algorithm c++11

尝试刷新我的C ++,我从网络搜索中选择了一个帮助函数,然后在C ++参考资料中查找之前尝试了它:

int count_vowels(const std::string &input) {
    return std::count_if(input.begin(), input.end(), is_vowel);
}

当我查看有关count_if()的更多详细信息时,我发现它是< algorithm>的一部分。库代码(http://www.cplusplus.com/reference/algorithm/count_if/),我在编译和运行它时没有包含它。为什么在没有< algorithm>的情况下函数可以工作?头?我已经包含< iostream>,< string> (显然)和< sstream<>。如果重要的话,我会使用编译标志-std=c++11

此外,如果没有< algorithm>标题,为了清楚起见,我应该把这个标题放在一边(或者因为其他编译器不一定会选择必要的函数定义)?

2 个答案:

答案 0 :(得分:6)

它有效,因为它可能通过其他标头间接包含。虽然它不能保证,它可能会破坏不同的编译器,或者你现在正在使用的编译器的未来版本。

直接包含您需要的所有标题。

答案 1 :(得分:0)

如果您使用的是Visual C ++,那么您可以启用show includes来查看包含的文件,通过Project - >设置 - > C / C ++ - >高级。

如果使用gcc,则说明了等效内容:/show include equivalent option in g++

然后您将知道它被包含在哪里。