0

ベクトルの値をチェックしてから、考慮に入れるのに十分な値がないブロックを削除する関数があります。

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()しても以前と同じ値であるため、ブロックは削除されません。

なぜこれが起こっているのか誰かが知っていますか?

4

1 に答える 1

1

i 番目の要素を削除する場合は、次のようにします。

blocks.erase(blocks.begin()+i);
于 2012-11-14T20:21:19.343 に答える