向量与数组:性能困境
在 C 中,不鼓励使用数组,而是使用 std::vector。然而,性能差异的程度经常受到质疑。
避免使用 C 数组
当前指南建议避免新分配的 C 数组,因为它们需要手动跟踪和删除。此外,由于缺乏范围检查和指针转换期间大小信息丢失,不鼓励在堆栈上使用数组。在这种情况下,建议使用 std::array,提供大小函数和迭代器。
std::Vector 与原生数组
经验发现表明基本索引,向量上的解引用和递增操作与其相应的数组/指针对应物执行相同。汇编代码分析证实了这种等价性(请参见下面的代码片段)。
int pointer_index(S &s) { return s.p[3]; } // Analogous to vector indexing int vector_index(S &s) { return s.v[3]; } // Same assembly code
int pointer_deref(S &s) { return *s.p; } // Analogous to iterator dereferencing int iterator_deref(S &s) { return *s.i; } // Identical assembly code
void pointer_increment(S &s) { ++s.p; } // Analogous to iterator increment void iterator_increment(S &s) { ++s.i; } // Same assembly code
异常:新分配数组的性能优势
一性能等效性的例外是包含非类对象或没有用户定义构造函数的类的新分配数组。在这种情况下,新分配的数组比 std::vector 更有优势,因为 std::vector 在构造时将元素初始化为默认值(例如,int 为 0)。
以上是什么时候 `std::vector` 的性能优于 C 中的原始数组?的详细内容。更多信息请关注PHP中文网其他相关文章!