有没有更好的方法来擦除动态数组元素?

时间:2014-02-17 15:47:39

标签: c++

例如,我在C ++中有一个动态数组,类似于std::vector。在实施erase功能时,这是最好的前进方式,还是有更好的方式更快/更有效?

void erase(iterator it)
{
    my_array<template_argument> x;
    for(iterator i = begin(); i != end(); ++i)
    {
        if(i == it)
        {
            continue;
        }
        x.push(*i);
    }
    *this = x;
}

2 个答案:

答案 0 :(得分:4)

您可以执行就地删​​除,而不是制作几乎整个数组的新副本。

for(iterator i = it; i+1 != end(); ++i)
{
    *i = *(i+1); // or std::iter_swap(i, i+1); if swapping is more efficient
}
pop();

答案 1 :(得分:0)

这实际上取决于您的要求。如上所述,一般情况下,您将使用std::iter_swap在要删除的元素之前(或之后)移动所有元素。

例如,如果您查看std::deque,它可以保证最多N/2个元素通过选择是否在之前或之后移位这些元素来移动,具体取决于要删除的元素是否更接近于头或尾巴。

相关问题