【问题标题】:why do i need to include <vector> to use them?为什么我需要包含 <vector> 才能使用它们?
【发布时间】:2016-07-06 15:59:31
【问题描述】:

我是 C++ 新手,想弄清楚如何使用 vector

更具体地说,我想知道何时需要使用#include&lt;vector&gt;。我之所以这么问,是因为我见过有和没有在程序中使用vector#include 语句的程序。

【问题讨论】:

  • 嗯,这就是 c++ 的工作方式。您必须包含头文件才能获取您正在使用的声明。
  • 如果您使用标准标头中的某些内容,则包含该标头。如果你遵循这种行为,生活就会变得美好而轻松。
  • 如果您在文件上使用#include 指令,那么这与将引用文件的全部内容放入源中基本相同。因此,如果您引用的文件包含它自己的文件,这些文件也将被放入您的源代码中。
  • @πάνταῥεῖ 请在答案部分写下答案。这就是 SE 的工作方式。
  • 我知道#include的含义,我的问题是如果你想使用vector是否需要包含,那么你怎么可能在不包含它的情况下也可以使用vector?跨度>

标签: c++ vector


【解决方案1】:

当您看到使用std::vector 但未使用#include &lt;vector&gt; 的代码时,该代码已损坏。期间。

在特定的编译器/标准库实现/平台/行星上工作可能“恰巧”,这取决于哪些其他标准头文件“恰巧”已经包含 &lt;vector&gt; 以供自己使用。不应依赖这一点。

【讨论】:

  • 换句话说,C++(甚至C++17)还没有模块。
  • 你忘了添加它可能在周二有效,但其他日子不行:) :)
  • 好的,谢谢。除了你的回答,我怎么知道vector 是标准的一部分?我的意思是,我以后怎么知道我需要在代码中的某些组件之前添加std::
  • @Nadavp:如果它带有 C++,它是std::。如有疑问,请谷歌。
【解决方案2】:

vector 实际上并没有内置到 C++ 中,它只是其标准库的一部分,如果您使用 C++,它保证可供您使用。 vector(或全名std::vector)本身是用 C++ 实现的。

通过编写#include &lt;vector&gt;,您告诉编译器不仅要使用您自己的代码,还要编译一个名为vector 的文件。这个文件实际上在你硬盘的某个地方(如果你使用 GNU/Linux,它可能位于/usr/include/c++/[GCC_VERSION]/vector)。

你不能在不包含该文件的情况下使用std::vector,因为编译器不知道名为std::vector 的类。编译器只知道语言 C++,不知道它的标准库!

如果某些程序使用std::vector而不包含其头文件,那是因为它们已经包含的某些头文件在某处有一个#include &lt;vector&gt;。这可能有充分的理由(例如,一些 C++ 课程附带一个包含所有必要标题的文件,并且在前几节课中使用)。然而,也可能有包含vector 的标准库头文件(iostream 的一些实现会这样做)。依赖它不是一个好主意,因为它因实现而异,因此您的程序可能在 Visual C++ 2010 中工作,但它不能在 GNU 或更新版本的 Visual C++ 上编译。

【讨论】:

    【解决方案3】:

    您可能会看到不#include &lt;vector&gt; 直接的代码。但是,如果您检查预处理的代码,我敢肯定您会发现该代码 确实 包含标头 - 但间接通过其他标头。

    这是脆弱的,你不应该这样做。但这并不意味着它不起作用。

    【讨论】:

      【解决方案4】:

      您需要包含头文件,才能使用任何类型的数据/函数。 c++中的所有数据类型和函数都包含在自己的库中。如果不包含库,c++程序将不知道你使用了什么,因为它甚至不知道它们是否存在。就像:

      你想和吉姆的狗玩,但你不知道吉姆是谁,或者什么 一条狗。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 2013-10-02
        • 1970-01-01
        相关资源
        最近更新 更多