有没有办法优化这段代码?

时间:2011-08-04 10:46:34

标签: c++

我正在研究这一小段代码,虽然它按照我的预期工作,但我需要对其进行优化。请给我一些想法。

这是我的代码的重要部分:

std::replace_if(inputImage,inputImage+ m_xDim*m_yDim*m_zDim, bind2nd(std::less<float>(), 0), 0); // replace the values <0 with 0 of array input

std::replace_if(inputImage,inputImage+ m_xDim*m_yDim*m_zDim, bind2nd(std::greater<float>(), 4095), 4095);   // replace the values >4095 with 4095 of array input

正如您所看到的,我将inputImage的值设置为[0,4095]。但是,很明显,这不是有效的代码,becoz我可以循环运行并且一次性完成这两项工作。但是,这变成了C风格而不是C ++。

有没有办法使用 replace_if 并一次性完成这两件事。

2 个答案:

答案 0 :(得分:4)

float clip(float value) {
    return std::min(std::max(0, value), 4096);
}

int size = m_xDim * m_yDim * m_zDim;
std::transform(inputImage, inputImage + size, inputImage, clip);

答案 1 :(得分:1)

您始终可以使用transform和适当的变压器,即:

struct Clipper
{
    int operator()( int in ) const
    {
        return in < 0 ? 0 : 4096 < in ? 4095 : in;
    }
};