【发布时间】:2011-03-16 00:50:13
【问题描述】:
我正在为自己从 STL 编写一些容器的轻量级版本。
(我知道 STL 是由专业程序员编写的,如果认为我可以比他们写得更好,我太愚蠢或太有野心了。当我写我的列表时(仅使用我需要的方法),它工作了几次更快。所以,我认为这是个好主意。但是,无论如何。)
我对@987654321@ 的速度感到失望。我看了一眼 souses,发现没有很好的算法。几乎和我一样,我想:
void pop()
{
if(topE) // topE - top Element pointer
{
Element* n_t = topE->lower; // element 'under' that one
delete topE;
topE = n_t;
}
}
但它的运行速度比 STL 慢很多。
erase(--end());
谁能解释一下为什么迭代器擦除更快?
【问题讨论】:
-
列表可能是最差/最慢的容器。您为堆栈使用列表这一事实会使堆栈变得更糟,因为
std::stack没有(默认情况下)。 -
@GMan - 该死的,我没有想到 - 我不使用 std::stack 所以我忘了它默认包装了一个双端队列。好点子。
-
@GMan,好吧,如果我需要一组未排序的对象并能够遍历它们(迭代),我应该使用什么?设置?
-
@MInner: A
std::vector或std::deque? -
@Minner : set 会更糟 :) 使用向量或双端队列。
标签: c++ performance stl stack