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

BCS*_*BCS 2 c++ stl

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

我应该使用什么容器?

Fre*_*son 8

标准建议使用vector作为默认容器.但Herb Sutter实际上是以使用deque作为您的首选.


dei*_*nst 5

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

  • `push_back()`应该以恒定的摊销时间运行.这意味着某些调用可能会导致大量分配并花费很长时间,但平均时间是不变的.这不会引起分页和虚拟内存的问题,但任何集合都会受到影响,并且比矢量更快. (4认同)

pae*_*bal 5

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

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

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

typedef std::vector<MyThing> MyThingContainer ;
Run Code Online (Sandbox Code Playgroud)

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

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

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