
//
// To jest przykładowy kod z podrozdziału 21.5.3 „Iloczyn skalarny” książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include <iostream>
#include <list>
#include <vector>

using namespace std;

//------------------------------------------------------------------------------

template<class In, class In2, class T>
T inner_product(In first, In last, In2 first2, T init)
// Uwaga: w ten sposób mnoży się dwa wektory (wynikiem jest wielkość skalarna).
{
    while(first!=last) {
        init  = init + (*first) * (*first2);    // Mnoży pary elementów.
        ++first;
        ++first2;
    }
    return init;
}

//------------------------------------------------------------------------------

int main()
{
    // Oblicza indeks Dow Jones Industrial:
    vector<double> dow_price;        // cena akcji każdej spółki
    dow_price.push_back(81.86); 
    dow_price.push_back(34.69);
    dow_price.push_back(54.45);
    // ...

    list<double> dow_weight;    // waga każdej spółki w indeksie
    dow_weight.push_back(5.8549);    
    dow_weight.push_back(2.4808);
    dow_weight.push_back(3.8940);
    // ...

    double dji_index = inner_product(        // mnoży pary (weight,value) i sumuje
        dow_price.begin(), dow_price.end(),
        dow_weight.begin(),
        0.0);

    cout << "Wartość DJI " << dji_index << '\n';
}

//------------------------------------------------------------------------------
