2014-04-25 56 views
2

我知道std::inner_product算法会遇到问题,如果你正在处理两个不同大小的数组。是否有另一种标准库算法可以处理不同大小的数组,例如:通过自动使用两个数组中的较小者?替代std :: inner_product算法?

+0

不知道,但它不会很难实现。 – MattG

+0

如何在函数调用之前使用'if'来自己选择较小的尺寸? – deviantfan

+0

@deviantfan如果你没有RandomAccessIterator,搞清楚范围的大小可能是非常低效的,如果你有InputIterator,则不可能。 – Praetorian

回答

3

不难实现一个。

template <class InputIterator1, class InputIterator2, class T> 
    T inner_product (InputIterator1 first1, InputIterator1 last1, 
        InputIterator2 first2, InputIterator2 last2, T init) 
{ 
    for (; first1 != last1 && first2 != last2; ++first1, ++first2) 
    { 
     init += (*first1)*(*first2); 
    } 
    return init; 
} 
+1

我认为你应该返回一个三倍的计算值和两个最终的迭代器'first1','first2'(因为这是可能不可能或昂贵的信息,例如对于输出或不是RandomAccess迭代器)。 – dyp

+0

这里是我最终做的:double SomeClass :: SomeFunction(std :: vector < double >&vector1){if(vector1.size() SpeedPacer

+0

@ user2418536这也适用。 –