我只需要一包“东西”。它不需要是一个集合,一个地图甚至没有任何特定的顺序。我只需要能够添加东西并迭代它,仅此而已。我不认为它会非常大,但如果确实如此,它就不会变得非常糟糕。
我应该使用什么容器?
答案 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是一个很好的默认选择。它是一个简单的数据结构,实现为动态数组。这些元素彼此相邻包装,这是一个很好的参考局部(有利于缓存)