假设我有一个小对象列表,我通过频繁的插入和删除来迭代(例如,在循环中)。但是,我遍历列表的顺序并不重要。我没有使用 std::list 来存储元素,而是考虑以下列方式使用 std::vector (用于恒定时间删除):
插入:使用 push_back 在数组末尾插入。
删除:假设我想从大小为 n 的向量中删除位置 k 处的元素。然后,我将第 n 个(或 (n-1)st,取决于您如何看待)元素的内容复制到第 k 个元素并使用 pop_back。鉴于元素很小,复制操作不应该是昂贵的。
这是为了利用连续内存,而不必为每次插入动态分配内存。这种方法有缺点吗?我还注意到 C++11 有 unordered_set,但我认为这对于我正在尝试做的事情来说可能是矫枉过正。
如果这个想法听起来很明显,我深表歉意。