【发布时间】:2010-11-05 22:00:39
【问题描述】:
只是一个简单的QList介绍,QList类似于QVector和STL vector,但另外在开头也预留了一些空间; (最后也是) 我正在 STL 中寻找类似的东西,如果不是至少 Boost
在开始时保留空间可以改进前置或删除第一项(恒定时间),因为缓冲区可以向后增长。根据插入位置改进插入。 那么有人知道 STL/C++ 中有类似的数据结构吗? 谢谢。
【问题讨论】:
只是一个简单的QList介绍,QList类似于QVector和STL vector,但另外在开头也预留了一些空间; (最后也是) 我正在 STL 中寻找类似的东西,如果不是至少 Boost
在开始时保留空间可以改进前置或删除第一项(恒定时间),因为缓冲区可以向后增长。根据插入位置改进插入。 那么有人知道 STL/C++ 中有类似的数据结构吗? 谢谢。
【问题讨论】:
std::deque 提供恒定时间的前后插入移除,如果您正在寻找的话。
【讨论】:
如果您想在序列的开头和结尾高效插入和删除,请使用std::deque。
【讨论】:
如果您知道容器大小的上限并且不打算插入容器中间,您可以使用boost::circular_buffer。
如果您要进行大量容器中间插入,deque 将是比 vector 更好的选择,因为它(通常)将成员分组到固定大小的块中,而不是一个连续的内存块。
注意 - QList 实际上声明它使用指向对象的指针数组,如果它们不重要的话。要在 C++ 中模拟这一点,您可以在 MyClass 上使用 deque<MyClass*> 或(更好)一些智能指针包装器,例如 unique_ptr 或 shared_ptr,以防止在管理中过度复制 MyClass。
在内部,QList 表示为 指向类型项的指针数组 T. 如果 T 本身是指针类型或 不大于 a 的基本类型 指针,或者如果 T 是 Qt 的共享之一 类,然后 QList 存储 直接在指针数组中的项目。 对于一千项以下的列表,此 数组表示允许非常 在中间快速插入,它 允许基于索引的访问。
【讨论】:
int、char 等,具有简单的复制构造和赋值,那么这就是我引用的摘录所暗示的。 'Movable' 是 C++0x 上下文中的加载词。