我正在尝试计算 double vector (称为A)的标准偏差。
现在,我有一个名为StDev的函数将执行此操作。但是,第一个
vector A的几个元素为零,我需要将其删除。为此,我
创建一个子数组,然后将其传递给我的StDev函数,如下所示:

 std::vector<double> Array(find_if(Data.begin(), Data.end(), std::bind1st (std::not_equal_to<double>(), 0.0)), Data.end());

 double standard_deviation = StDev(Array);

有没有一种方法可以不必创建 vector 'Array'
仅使用一次。我可以以某种方式直接传递所需的子数组吗?

谢谢!

最佳答案

如果可以修改StDev函数以采用迭代器范围而不是整个容器,则可以很容易地做到这一点:

template <typename ForwardIt>
std::iterator_traits<ForwardIt>::value_type
StDev(ForwardIt first, ForwardIt last) { /* ... */ }

// called as:
double stdev = StDev(Data.begin(), Data.end());

// or:
double stdev = StDev(
    find_if(Data.begin(), Data.end(),
            std::bind1st(std::not_equal_to<double>(), 0.0)),
    Data.end());

关于STL - double vector 数组中前导零的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3601161/

10-11 16:29