C ++中最快的动态数据结构

时间:2014-03-26 18:40:01

标签: c++ arrays data-structures dynamic-arrays

我的任务主要包括在C++中添加或删除数组中的元素。由于数组不是动态的,但对它们的操作非常快,我一直在寻找一种几乎同样快速运行的动态数据结构。我一直在考虑std::vector,但由于它是预定义的并且非常庞大的构造,我担心操作的时间对我来说至关重要。任何人都可以向我提供有关您观点的一些信息吗?我很乐意得到你的任何帮助!


编辑:

我真的很抱歉,我没有在我的问题中包含所有重点;下面我尝试添加更多信息:

  • 我将多次遍历结构的元素并以随机方式访问它们,因此可以对每个可能位置的元素进行操作
  • 我认为(根据提供的测试)会对数据结构中间的元素以及靠近“边缘”的元素进行许多操作。

我相信这将有助于我的帖子更清晰,更具体,因此对其他人更有用。

感谢您的所有答案!

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

在STL中实现了不同的数据结构,以用于不同的原因。因此,当结构的开始,中间或结尾处的插入/删除速度或甚至结构元素的随机访问时,结构都不同。

答案 2 :(得分:0)

STL容器的简短比较:

http://john-ahlgren.blogspot.com/2013/10/stl-container-performance.html

如果您可以使用关联数组,则映射至少可以保证O(log n)的插入/查找时间,这对于大量数据/大量插入来说要快得多并且删除了非向后插入的向量保证O(n)。

不确定它们是否可以在这里工作,此链接还会在几个不同的容器上显示一些使用随机插入/删除/搜索/填充/排序等的基准图表:

http://www.baptiste-wicht.com/2012/12/cpp-benchmark-vector-list-deque/

最后,SO的流程图可以帮助您决定容器:

In which scenario do I use a particular STL container?

虽然不完美,但仍然可能会发现矢量是你最好的选择。

答案 3 :(得分:0)

使用数组实现的链​​表是否符合您的需求?

class AList
{
   public:

      AList()
      {
         for (int = 0; i != 256; ++i )
         {
            nodes[i].prev = (i-1+256)%256;
            nodes[i].next = (i+1)%256;
         }
      }

      int const& operator[](int index)
      {
         // Deal with the case where nodes[index].isSet == false
         return nodes[index].data;
      }

      // Not sure what the requirements are for adding
      // and removing items from the list.
      //
      // add();
      // remove();

   private:

      struct Node
      {
         Node() : data(0), prev(0), next(0), isSet(false) {}

         int data;
         unsigned char prev;
         unsigned char next;
         bool isSet;
      };

      Node nodes[256];
};