是怎么来的一个std ::向量随机删除比一个std ::名单更快?我在做什么,以加快它是最后的交换随机元素,然后删除最后。 我本来以为该列表会更快,因为随机删除是它是为建。

for(int i = 500; i < 600; i++){
    swap(vector1[i], vector1[vector1.size()-1]);
    vector1.pop_back();
}

for(int i = 0; i < 100; i++){
        list1.pop_front();
}

结果(秒):结果 VEC交换删除:0.00000909461232367903结果 列表正常删除:0.00011785102105932310

有帮助吗?

解决方案

你在做什么不是随机删除,但。你从末,也就是向量为(除其他事项外)建成删除。

和交换的时候,你在做一个随机索引操作,这是的什么载体所擅长的。

其他提示

std::list std::vector之间的差别不只是向下性能。他们也有不同的迭代器失效语义。如果从std::list删除项目,指向列表中的其他项目所有迭代器仍然有效。并非如此,std::vector,其中删除的项无效该项目后指向所有迭代器。 (在一些实现中,他们仍然可以作为有效的迭代器,但按照标准,他们现在无法使用,以及检查落实应该如果您尝试使用它们来断言。)

所以你的容器的选择也做您所需要的语义。

这不是随机的。尝试vector1.erase(vector.begin()+兰特()%vector.size());代替。

列表erase将导致删除的擦除列表元素,这将调用到delete操作者的呼叫。矢量擦除只是导致交换,然后一个整数递减 - 这是快了很多

实际上,如果你想进一步速度起坐你应该经由矢量索引元件的迭代即可。他们被称为有一些架构更好的性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top