【问题标题】:Is there a QList type datastructure in STL or Boost?STL 或 Boost 中是否有 QList 类型的数据结构?
【发布时间】:2010-11-05 22:00:39
【问题描述】:

只是一个简单的QList介绍,QList类似于QVector和STL vector,但另外在开头也预留了一些空间; (最后也是) 我正在 STL 中寻找类似的东西,如果不是至少 Boost

在开始时保留空间可以改进前置或删除第一项(恒定时间),因为缓冲区可以向后增长。根据插入位置改进插入。 那么有人知道 STL/C++ 中有类似的数据结构吗? 谢谢。

【问题讨论】:

    标签: c++ boost stl qt4


    【解决方案1】:

    std::deque 提供恒定时间的前后插入移除,如果您正在寻找的话。

    【讨论】:

    • 是的..这就是我要找的,
    【解决方案2】:

    如果您想在序列的开头和结尾高效插入和删除,请使用std::deque

    【讨论】:

      【解决方案3】:

      如果您知道容器大小的上限并且不打算插入容器中间,您可以使用boost::circular_buffer

      如果您要进行大量容器中间插入,deque 将是比 vector 更好的选择,因为它(通常)将成员分组到固定大小的块中,而不是一个连续的内存块。

      注意 - QList 实际上声明它使用指向对象的指针数组,如果它们不重要的话。要在 C++ 中模拟这一点,您可以在 MyClass 上使用 deque<MyClass*> 或(更好)一些智能指针包装器,例如 unique_ptrshared_ptr,以防止在管理中过度复制 MyClass

      在内部,QList 表示为 指向类型项的指针数组 T. 如果 T 本身是指针类型或 不大于 a 的基本类型 指针,或者如果 T 是 Qt 的共享之一 类,然后 QList 存储 直接在指针数组中的项目。 对于一千项以下的列表,此 数组表示允许非常 在中间快速插入,它 允许基于索引的访问。

      【讨论】:

      • 实际上,我认为如果 T 是可移动类型对象,那么 QList 将直接存储。我想是的,但如果有错请纠正我。但是谢谢史蒂夫
      • @reddy 我的 Qt 知识总和在上面——我只是在此处查找正确的上下文。但是,如果您的意思是与指针大小相同的类型,例如 intchar 等,具有简单的复制构造和赋值,那么这就是我引用的摘录所暗示的。 'Movable' 是 C++0x 上下文中的加载词。
      • Steve,我不知道 moveable 实际上是 C++ 的概念,我以为是来自 Qt。再次感谢您:D
      • @reddy - C++0x 中有新特性允许构建更高效的“移动”构造函数 - nuonsoft.com/blog/2009/06/07/… - 我不想让你感到困惑,这就是我的意思.
      猜你喜欢
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 2018-03-13
      • 2011-12-04
      • 1970-01-01
      相关资源
      最近更新 更多