首页 > 后端开发 > C++ > 什么时候 `std::vector` 的性能优于 C 中的原始数组?

什么时候 `std::vector` 的性能优于 C 中的原始数组?

Mary-Kate Olsen
发布: 2024-12-20 10:38:12
原创
684 人浏览过

When Does `std::vector` Outperform Raw Arrays in C  ?

向量与数组:性能困境

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板