只是一个简短的QList简介,QList类似于QVector和STL向量,但此外它还在开头保留了一些空间; (最后也是) 我正在寻找类似于STL的东西,如果不是至少Boost
在开头预留空间可以改善前置或删除第一项(常量时间),因为缓冲区可以向后增长。根据插入位置改进插入。 那么有没有人知道STL / C ++中类似的数据结构? 感谢。
答案 0 :(得分:6)
std::deque
会在固定时间内提供前后插入移除,如果它正是您要查找的内容。
答案 1 :(得分:3)
如果您希望在序列的开头和结尾有效插入和删除,请使用std::deque
。
答案 2 :(得分:1)
如果您知道容器大小的上限并且不计划容器中间插入,则可以使用boost::circular_buffer。
如果你正在进行大量的中间容器插入deque
将是比vector
更好的选择,因为它(通常)将成员分组为固定大小的块,而不是一个连续的块存储器中。
注意 - QList实际上声明它使用指向对象的数组,如果它们是非平凡的。要在C ++中模拟这一点,您可以使用deque<MyClass*>
或(更好)某些智能指针包装器MyClass
,例如unique_ptr
或shared_ptr
,以防止{{1}过度复制在家务管理中。
在内部,QList表示为 指向类型项的指针数组 T.如果T本身是指针类型或者是 基本类型不大于a 指针,或者如果T是Qt的共享之一 类,然后QList存储 直接在指针数组中的项目。 对于千件以下的清单,这个 数组表示允许非常 快速插入中间,它 允许基于索引的访问。