【发布时间】:2012-06-07 08:44:55
【问题描述】:
我有一个相对较小的已排序std::vector(从 5 到 20 个元素)。
我使用了std::vector,因为数据是连续的,所以我有速度因为缓存。
在特定点上,我需要从这个 vector 中删除一个元素。
我现在有一个疑问:在以下 2 个选项之间删除此值的最快方法是什么?
- 将该元素设置为 0 并调用
sort重新排序:这很复杂,但 元素位于同一缓存行上。 - 调用
erase,它将复制(或memcpy谁知道??)它之后的所有元素 1 个地方(我需要调查擦除的幕后)。
你知道哪个更快吗?
我认为可以考虑使用相同的方法来插入新元素而不会达到向量的最大容量。
问候
AFG
【问题讨论】:
-
你为什么不测量并找出来?
-
另外,我看不出排序(涉及复制)如何比复制更快。
-
...容器元素的类型也很重要。
-
您正在对缓存行等进行假设,但我认为您最好在现实条件下对其进行分析。
-
为什么不使用符合这种模式的东西,比如有序地图?他们自动处理这些东西,在这些大小上,底层树的开销可以忽略不计。
标签: c++ performance stl stdvector erase