什么是您需要的首选STL系列?

时间:2010-07-20 00:27:49

标签: c++ stl

我只需要一包“东西”。它不需要是一个集合,一个地图甚至没有任何特定的顺序。我只需要能够添加东西并迭代它,仅此而已。我不认为它会非常大,但如果确实如此,它就不会变得非常糟糕。

我应该使用什么容器?

5 个答案:

答案 0 :(得分:8)

标准建议使用vector作为默认容器。但Herb Sutter实际上是makes a case for using deque as your first choice

答案 1 :(得分:5)

vector可能是所有容器的最低开销。只要你不在中间添加或删除东西。

答案 2 :(得分:5)

默认情况下,使用矢量......但是,如果可能的话,不要忘记使用类型间接!

原因是如果你只需要迭代,那么你应该能够使用任何一个可用的STL容器,并通过typedef间接选择它一次。

例如,假设您最初会选择一个向量(这是默认选项):

typedef std::vector<MyThing> MyThingContainer ;

然后像往常一样使用容器:

void foo(MyThingContainer & things)
{
    for(MyThingContainer::iterator it = things.begin(),
        itEnd = things.end() ;
        it != itEnd ;
        ++it)
   {
      MyThing & thing = *it ;
      // Do something with that thing
   }
}

这样,当你找到一个列表,或者一个双端队列,或者任何比向量更好的容器时,只需更改typedef并重新编译,就可以改变容器的真实类型。

答案 3 :(得分:1)

std::vector。不需要operator<

答案 4 :(得分:0)

std :: vector是一个很好的默认选择。它是一个简单的数据结构,实现为动态数组。这些元素彼此相邻包装,这是一个很好的参考局部(有利于缓存)