-4
如果我這樣做...if語句極其緩慢的循環
vector< array<double,2> > magT(magnitude.size(), array<double,2>());
for (int n = 0; n < magnitude.size()-amount; n++) {
for (int chan = 0; chan < channels; chan++) {
for (int m = 0; m < amount; m++) {
magT.at(n).at(chan) += magnitude.at(n+m).at(chan);
}
magT.at(n).at(chan) /= amount;
}
}
magnitude = magT;
...其快如閃電。但是,如果我添加幾個if語句是這樣的...
vector< array<double,2> > magT(magnitude.size(), array<double,2>());
int upper = ceil(amount/2);
int lower = floor(-amount/2);
for (int n = 0; n < magnitude.size(); n++) {
for (int chan = 0; chan < channels; chan++) {
for (int m = lower; m < upper; m++) {
m = n+m < 0 ? 0 : m;
m = n+m > magnitude.size()-1 ? 0 : m;
magT.at(n).at(chan) += magnitude.at(n+m).at(chan);
}
magT.at(n).at(chan) /= amount;
}
}
magnitude = magT;
...它數百次慢,甚至千計。邏輯表述真的很慢嗎?我應該讓他們脫離這樣的嵌套循環嗎?如果是這樣,我該如何合理地完成這樣的事情?
這是因爲您有條件重置'for'循環('m = 0;')** not **,因爲'if'語句。 – trojanfoe
Doh!謝謝... –
您還可以在所有for循環外計算'magnitude.size()'。任何可以在三重嵌套循環之外進行計算的東西應該是。 – asimes