在双精度矢量数组中导致零的问题

时间:2010-08-30 14:16:19

标签: stl vector c++

我想计算双精度矢量的标准差(称为A)。 现在我有一个名为StDev的函数可以执行此操作。但是,第一个 向量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); 

有没有办法在不必创建矢量'Array'的情况下执行此操作 只使用一次。我可以以某种方式直接传递所需的子数组吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

如果您可以修改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()); 

答案 1 :(得分:1)

您可以更改StDev函数,以便它跳过数组开头的零元素。