矢量搜索与数组搜索的时间成本

Time cost of vector search vs. array search

本文关键字:搜索 时间 数组      更新时间:2023-10-16

首先,一些背景。我正在创建一个程序,其中包含主题公园所有失物招领物品的排序列表,主要用于学校教育目的。从理论上讲,该程序最终可能会处理数千(甚至更多(项目。

我熟悉使用std::vector而不是数组的清晰/易用性原因。

的问题:在此排序列表中搜索特定项目时,是否有任何重要的性能原因导致我应该使用数组而不是选择 std::vector?

注意:不需要调整矢量大小。它将在程序开始时(从文件(初始化,并且永远不会直接向其添加项目。

首先,std::vector(实际上(是动态数组的零成本抽象。向量的大多数函数都是被编译器剥离的琐碎内联函数。因此,许多使用向量生成的代码与使用动态数组生成的代码相同。

其次,标准库的算法部分甚至无法区分数组和向量,因为向量的迭代器编译为原始指针,就像数组一样。

所以,如果你能衡量任何差异,我会感到非常惊讶,因为很可能不会有任何差异。如果有,您可以随时传递向量的内部数组,当然,这与使用数组相同。因为它是一个数组!

数组和向量在排序速度方面没有显着差异,不是。我也会选择矢量。

去矢量,它没有真正的妥协。此外,Scott Meyers 撰写了多个最有用的 c++ 读物,他说: Item 13. Prefer vector and string to dynamically allocated arrays.阅读整章,你会发现很多使用向量的原因。