2014-04-25 85 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這也適用。 –