我在有效的STL中注意到
向量是默认情况下应该使用的序列类型。
这是什么意思?似乎忽略效率,vector可以做任何事情。
有人能给我提供一个场景,vector不是一个可行的选项,但必须使用list?
发布于 2010-02-05 17:56:35
发布于 2010-02-05 18:05:05
如果您不需要经常插入元素,那么向量就会更有效。它比列表具有更好的CPU缓存局部性。换句话说,访问一个元素很可能使下一个元素存在于缓存中,并且可以在不需要读取缓慢RAM的情况下被检索。
发布于 2013-03-27 14:33:14
这里的大多数答案都忽略了一个重要的细节:为什么?
你想把什么放在集装箱里?
如果它是int的集合,那么std::list在每个场景中都会丢失,不管您是否可以重新分配,您只能从前面删除等等。列表遍历速度较慢,每次插入都需要与分配器进行交互。要准备一个list<int>胜过vector<int>的例子将是非常困难的。即使如此,deque<int>也可能更好或更接近,而不是限制列表的使用,这将带来更大的内存开销。
然而,如果您正在处理大的、丑陋的数据块--而且很少--您不希望在插入时过多分配,而由于重新分配而进行复制将是一场灾难--那么使用list<UglyBlob>可能比使用vector<UglyBlob>更好。
尽管如此,如果您切换到vector<UglyBlob*>,甚至是vector<shared_ptr<UglyBlob> >,那么列表将再次落后。
因此,访问模式、目标元素计数等仍然会影响比较,但在我看来--元素大小--复制成本等等。
https://stackoverflow.com/questions/2209224
复制相似问题