首页 >后端开发 >C++ >为什么我应该避免 `std::vector` 以及什么时候 `std::deque` 可能是更好的选择?

为什么我应该避免 `std::vector` 以及什么时候 `std::deque` 可能是更好的选择?

DDD
DDD原创
2024-12-15 03:44:08423浏览

Why Should I Avoid `std::vector` and When Might `std::deque` Be a Better Choice?

理解向量及其独特的特点

Scott Meyers 的《Effective STL》强调了避免使用向量由于它与标准 STL 容器不同。这种特性源于向量的空间优化,将每个bool存储为一个位而不是一个字节。

分解向量

Vector 的非常规行为源于其底层实现。与传统的 STL 容器不同,向量使用operator[]访问元素时返回一个代理对象,而不是bool&。该代理允许位级操作,但缺乏直接访问内存地址的能力。

deque;作为替代方案?

虽然 Meyers 认可 deque;作为 vector 的可行替代方案,注意到其潜在缺点至关重要。 Deque 并没有受益于 vector 的内存效率,它将每个 bool 存储为一个完整字节。此外,微软的标准库实现可能会以牺牲效率的方式分配双端队列块。

总结

Vector 与标准 STL 容器的偏差源于其优化内存使用。虽然它可以显着节省空间,但它是以某些标准容器功能和内存寻址限制为代价的。双端队列提供了更常规的选项,但其效率可能会因实现而异。

以上是为什么我应该避免 `std::vector` 以及什么时候 `std::deque` 可能是更好的选择?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn