当前位置: 首页 > 面试题库 >

删除'#include '不破坏代码

贺飞星
2023-03-14
问题内容

也许这是一个非常愚蠢的问题,但是我正在阅读的书却指示我编写一段代码,该代码使用算法对向量中的元素进行加扰和排序。为此,本书告诉我使用C
++主库中的算法库。好的,到目前为止,我理解了它,但是在编写代码之后,我想看看如果我从代码的顶部删除该库会导致什么中断,令我惊讶的是一切仍然有效。

这是我正在谈论的代码。当我从代码的顶部删除“ #include算法”时,没有任何中断。怎么会这样?不使用该库时,“
random_shuffle”部分不应该中断吗?

#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    vector<int>::const_iterator iter;

    cout << "Creating a list of scores.";
    vector<int> scores;
    scores.push_back(1500);
    scores.push_back(3500);
    scores.push_back(7500);

    cout << "\nHigh Scores:\n";
    for (iter = scores.begin(); iter != scores.end(); ++iter)
    {
        cout << *iter << endl;
    }

    cout << "\nFinding a score.";
    int score;
    cout << "\nEnter a score to find: ";
    cin >> score;
    iter = find(scores.begin(), scores.end(), score);
    if (iter != scores.end())
    {
        cout << "Score found.\n";
    }
    else
    {
        cout << "Score not found.\n";
    }

    cout << "\nRandomizing scores.";
    srand(static_cast<unsigned int>(time(0)));
    random_shuffle(scores.begin(), scores.end());
    cout << "\nHigh Scores:\n";
    for (iter = scores.begin(); iter != scores.end(); ++iter)
    {
        cout << *iter << endl;
    }

    cout << "\nSorting scores.";
    sort(scores.begin(), scores.end());
    cout << "\nHigh Scores:\n";
    for (iter = scores.begin(); iter != scores.end(); ++iter)
    {
        cout << *iter << endl;
    }

    system("pause");
    return 0;
}

问题答案:

它起作用的原因是因为还包含了一个标头。

例如,向量可能在其源代码中包含算法。这很常见,因为它们通常仅是标头。

也就是说,您不能依赖标准库的特定实现在每个标头中具有相同的包含。(例如与可能与MSVC一起使用,而与gcc stdlibc +++可能会中断)。

由于这个原因,我强烈建议包括您使用的内容,而不管它在哪里编译。-–请注意,这与“您引用的内容”略有不同,因为在标头中对点和引用的正向声明可以显着缩短构建时间。



 类似资料:
  • 问题内容: 我使用免费的虚拟主机000webhost。该服务还可以,但是它会在每个文件和请求中插入一些javascript计数器。该脚本如下所示。 如果我做一个jQuery发布,它破坏了我的代码,我没有任何回应。 我该如何解决?如何删除托管JavaScript代码? 问题答案: 他们在其cPanel中有一个链接,您可以在其中禁用分析代码。 http://members.000webhost.com

  • 问题内容: 我知道Go中没有析构函数,因为从技术上讲没有类。这样,我用来执行与构造函数相同的功能。但是,有没有办法在终止的情况下创建某些东西来模仿析构函数,例如使用关闭文件?现在,我只是打电话给我,但这有点荒唐,我认为设计很差。正确的方法是什么? 问题答案: 在Go生态系统中,存在一种处理包装了宝贵(和/或外部)资源的对象的惯用语:一种专门用于释放该资源的特殊方法,通常通过该机制进行 显式 调用。

  • .替换(...,Frag2,...) -->frag2 -->frag1

  • 问题内容: 我有一个用Restify和Mongoose在node.js中构建的REST服务,以及一个mongoDB,它的集合包含大约30.000个常规大小的文档。我的节点服务通过pmx和pm2运行。 昨天,节点突然开始通过消息“ MongoError:拓扑已被破坏”消除错误,仅此而已。我不知道这是什么意思,可能触发了什么。谷歌搜索时也没有太多发现。所以我想在这里问。 今天重新启动了节点服务后,错误

  • 我想为我的移动应用程序添加背景,但当我使用“this.props.children”时,eslint说我“必须使用解构道具分配”。为什么我可以分解这些道具? 这是我的密码, 当我使用这个代码时 当我使用这个代码时, 提前感谢您的帮助!

  • 在实际应用中,destroy方法的可能示例是什么?为什么一个正在运行的应用程序想要销毁它的bean?如果bean是由spring容器(比如ContextLoaderListener)为web应用程序创建的,那么如何重新创建这些bean,因为容器已经启动了。有没有办法在不重启应用服务器的情况下重启spring IoC容器?

  • 问题内容: 来自Python,我不习惯看到超过80列的代码行。所以当我遇到这个: 我试图打破它 但是我明白了 我还尝试过按回车键并在末尾加分号来打破界限: 但是我再次得到: 所以我想知道用什么语言来做到这一点? 问题答案: 首先介绍一些背景。Go的正式语法在许多产品中都使用分号作为终止符,但是Go程序可能会省略大多数(它们应该有一个更清晰易读的源;也可以删除不必要的分号)。 该规范列出了确切的规则

  • 对于Oracle池连接,我使用,但这些连接似乎在数据库中保持活动状态。今天我在连接到Oracle数据库时遇到了一个错误: ORA-12516:TNS:侦听器找不到具有匹配协议栈的可用处理程序 另外,我在dao级别使用jdk7 try-with-resources语法进行连接: 弄不清真正的问题在哪里。我应该使用c3p0而不是OracleDataSource吗?ojdbc7中是否有bug或我的代码中