【问题标题】:Advantages of using arrays instead of std::vector?使用数组而不是 std::vector 的优点?
【发布时间】:2023-04-04 00:44:01
【问题描述】:

我目前看到很多问题都标记为 C++,并且与处理数组有关。
甚至还有一些问题会询问std::vector 无需任何魔法即可提供的数组方法/功能。

所以我想知道为什么这么多开发人员在 C++ 中选择数组而不是 std::vector

【问题讨论】:

    标签: c++ arrays stl coding-style vector


    【解决方案1】:

    一般来说,我更喜欢使用向量而不是数组来完成不平凡的工作;但是,数组也有一些优点:

    • 数组更紧凑:大小是隐式的。
    • 数组不可调整大小;有时这是可取的。
    • 数组不需要解析额外的 STL 标头(编译时)。
    • 可以更轻松地与带有数组的纯 C 代码进行交互(例如,如果 C 正在分配而 C++ 正在使用)。
    • 固定大小的数组可以直接嵌入到结构或对象中,这可以提高内存局部性并减少所需的堆分配数量。

    【讨论】:

    • 另外:* 数组更快; * 数组可以静态初始化(而向量总是在运行时动态初始化)
    • 唉,“这么多开发人员在 C++ 中选择数组而不是 std::vector”只是因为他们阅读了一些旧书/坏书,现在不愿意切换到新的编程水平。我怀疑很多人在决定使用数组之前甚至会考虑你的任何观点。此外,无论向量提供什么,理论上任何程序员都必须能够使用数组,因为如果您不了解指针及其算法,您就无法成为一名优秀的 C++ 程序员
    【解决方案2】:

    因为 C++03 没有向量字面量。使用数组有时可以产生更简洁的代码。

    相对于数组初始化:

    char arr[4] = {'A', 'B', 'C', 'D'};
    

    向量初始化看起来有些冗长

    std::vector<char> v;
    v.push_back('A');
    v.push_back('B');
    ...
    

    【讨论】:

      【解决方案3】:

      我会选择 C++0x 中可用的 std::array,而不是普通数组,后者也可以像标准数组一样使用初始化列表进行初始化

      https://en.cppreference.com/w/cpp/container/array

      【讨论】:

        【解决方案4】:

        我认为这是因为许多 C++ 程序员来自 C,但还不了解使用 vector 及其容器免费提供的所有额外 STL 好东西的优势。

        【讨论】:

        • 你可能是对的。但是您仍然可以在数组中使用一些额外的好东西(STL 算法)。
        【解决方案5】:

        您对数组有更多的控制权

        怎么样:

        1) 您正在处理庞大的数据集,其中数据必须被映射文件,并且由于其大小而未分配mallocnew。在这种情况下,担心如果您在开始时没有保留足够的地址空间该怎么办可能没有实际意义,尽管我想您可以取消映射 - 扩展 - 重新映射文​​件,除非地址碎片或我的第二点禁止。

        2) 使用无锁多处理的代码。停止线程以进行重新分配(或任何其他“STL 好东西”)的性能损失可能是不可接受的,因此使用数组,您可以获得更多控制权,您可能需要调用很多函数来暂停其他线程,然后再调整大小任何事物。

        顺便说一句,我通常同时处理 1 和 2。结构数组 + 指针工作得非常好,使用 C++ 编译,因为您仍然可以在代码的其他地方使用一些 C++ 功能。如果我足够努力,我相信我可以想出更多的例子

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-22
          • 1970-01-01
          • 2011-08-03
          • 1970-01-01
          • 1970-01-01
          • 2020-08-20
          相关资源
          最近更新 更多