【发布时间】:2023-04-04 00:44:01
【问题描述】:
我目前看到很多问题都标记为 C++,并且与处理数组有关。
甚至还有一些问题会询问std::vector 无需任何魔法即可提供的数组方法/功能。
所以我想知道为什么这么多开发人员在 C++ 中选择数组而不是 std::vector?
【问题讨论】:
标签: c++ arrays stl coding-style vector
我目前看到很多问题都标记为 C++,并且与处理数组有关。
甚至还有一些问题会询问std::vector 无需任何魔法即可提供的数组方法/功能。
所以我想知道为什么这么多开发人员在 C++ 中选择数组而不是 std::vector?
【问题讨论】:
标签: c++ arrays stl coding-style vector
一般来说,我更喜欢使用向量而不是数组来完成不平凡的工作;但是,数组也有一些优点:
【讨论】:
因为 C++03 没有向量字面量。使用数组有时可以产生更简洁的代码。
相对于数组初始化:
char arr[4] = {'A', 'B', 'C', 'D'};
向量初始化看起来有些冗长
std::vector<char> v;
v.push_back('A');
v.push_back('B');
...
【讨论】:
我会选择 C++0x 中可用的 std::array,而不是普通数组,后者也可以像标准数组一样使用初始化列表进行初始化
【讨论】:
我认为这是因为许多 C++ 程序员来自 C,但还不了解使用 vector 及其容器免费提供的所有额外 STL 好东西的优势。
【讨论】:
您对数组有更多的控制权
怎么样:
1) 您正在处理庞大的数据集,其中数据必须被映射文件,并且由于其大小而未分配malloc 或new。在这种情况下,担心如果您在开始时没有保留足够的地址空间该怎么办可能没有实际意义,尽管我想您可以取消映射 - 扩展 - 重新映射文件,除非地址碎片或我的第二点禁止。
2) 使用无锁多处理的代码。停止线程以进行重新分配(或任何其他“STL 好东西”)的性能损失可能是不可接受的,因此使用数组,您可以获得更多控制权,您可能需要调用很多函数来暂停其他线程,然后再调整大小任何事物。
顺便说一句,我通常同时处理 1 和 2。结构数组 + 指针工作得非常好,使用 C++ 编译,因为您仍然可以在代码的其他地方使用一些 C++ 功能。如果我足够努力,我相信我可以想出更多的例子
【讨论】: