理解向量及其独特的特点
Scott Meyers 的《Effective STL》强调了避免使用向量由于它与标准 STL 容器不同。这种特性源于向量的空间优化,将每个bool存储为一个位而不是一个字节。
分解向量
Vector 的非常规行为源于其底层实现。与传统的 STL 容器不同,向量使用operator[]访问元素时返回一个代理对象,而不是bool&。该代理允许位级操作,但缺乏直接访问内存地址的能力。
deque;作为替代方案?
虽然 Meyers 认可 deque;作为 vector 的可行替代方案,注意到其潜在缺点至关重要。 Deque 并没有受益于 vector 的内存效率,它将每个 bool 存储为一个完整字节。此外,微软的标准库实现可能会以牺牲效率的方式分配双端队列块。
总结
Vector 与标准 STL 容器的偏差源于其优化内存使用。虽然它可以显着节省空间,但它是以某些标准容器功能和内存寻址限制为代价的。双端队列提供了更常规的选项,但其效率可能会因实现而异。
以上是为什么我应该避免 `std::vector` 以及什么时候 `std::deque` 可能是更好的选择?的详细内容。更多信息请关注PHP中文网其他相关文章!