从缓冲区中删除字节的快速方法

Med*_*eda 1 c optimization

有没有更快的方法来做到这一点:

    Vector3* points = malloc(maxBufferCount*sizeof(Vector3));
    //put content into the buffer and increment bufferCount        
    ...

    // remove one point at index `removeIndex`
    bufferCount--;
    for (int j=removeIndex; j<bufferCount; j++) {
        points[j] = points[j+1];
    }
Run Code Online (Sandbox Code Playgroud)

我问,因为我有一个巨大的缓冲区,我经常从中删除元素.

小智 5

不,抱歉 - 从数组中间删除元素需要O(n)时间.如果您确实想要经常修改元素(即删除某些项目和/或添加其他项目),请使用链接列表 - 具有恒定时间删除和添加.相反,数组具有恒定的查找时间,而链接列表可以在线性时间内访问(读取).因此,决定您将更频繁地做什么(阅读或写作),并根据该决定选择适当的数据结构.

但请注意,我(善意地)假设您并未尝试犯下过早优化的罪行.如果你还没有基准,这是瓶颈,那么很可能就是不担心.