C++ 使用多个块实现的矢量,无需调整副本大小
我想知道是否有可能实现一个类似stl的向量,其中存储是分块完成的,而不是分配一个更大的块并从原始块复制,您可以在不同的位置保留不同的块,并重载操作符[]以及迭代器的运算符+,因此向量的用户不知道这些块不是连续的C++ 使用多个块实现的矢量,无需调整副本大小,c++,data-structures,C++,Data Structures,我想知道是否有可能实现一个类似stl的向量,其中存储是分块完成的,而不是分配一个更大的块并从原始块复制,您可以在不同的位置保留不同的块,并重载操作符[]以及迭代器的运算符+,因此向量的用户不知道这些块不是连续的 这可以在超出现有容量时保存副本 您将寻找std::deque 看 在大多数情况下,更喜欢使用deque(有争议) 包含用于证明行为的基准 最新的C++11标准规定: §23.2.3序列容器 [2] 序列容器为程序员提供了不同的复杂性权衡,应该相应地使用。 向量或数组是默认情况下应使用的序
这可以在超出现有容量时保存副本 您将寻找std::deque 看 在大多数情况下,更喜欢使用deque(有争议) 包含用于证明行为的基准 最新的C++11标准规定: §23.2.3序列容器 [2] 序列容器为程序员提供了不同的复杂性权衡,应该相应地使用。 向量或数组是默认情况下应使用的序列容器类型。列表或转发列表 应该在序列中间频繁插入和删除时使用。德克是 当大多数插入和删除发生在数据的开始或结束时所选择的数据结构 顺序 说:
- 与插入一样,向量前端的擦除效率很低,但deque也提供了前端的恒定时间擦除
- deque能更有效地使用内存。考虑内存碎片,向量需要n个连续的内存块来保存其项目,其中n是项目的数量,而块是单个项目的大小。如果向量需要5或10 MB的内存,但可用内存碎片化到没有5或10 MB连续内存的程度,则这可能是一个问题deque没有这个问题,如果连续内存不足,deque将使用一系列较小的块。
- (性能)优化的第一条规则是:不要这样做
- 第二条规则(仅限专家):现在不要这样做