我有一个检查向量值的函数,然后删除没有足够值考虑的块。

vector<iniMatrix> Audio::filter(vector<iniMatrix>&blocks, double sumThres, double ZeroThres)
{
double totalSum = this->width * sumThres;
double totalZero = this->width * ZeroThres;

int currZero = 0;
int currsum = 0;

int prevsign = 0;

for(auto int i=0; (i < 96); i++)
{
    int currsign = zerocross(blocks[i]);
    double currSumOfBlocks = this->energy(blocks[i]);

    if(!totalSum > currSumOfBlocks || totalZero > currsign)
    {
        blocks[i].erase(blocks[i].begin()+blocks.size());
    }
}

return blocks;
}


它可以一直工作到擦除块为止,它不会删除它们,因为当我输出blocks.size()时,它仍然与以前相同,应该较小。

任何人都知道为什么会这样吗?

最佳答案

如果要删除第i个元素,则应执行以下操作:

blocks.erase(blocks.begin()+i);

关于c++ - vector -删除块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13386559/

10-11 23:06