Gesucht: combine_iterator



  • Moin zusammen,

    ich suche einen Iteratoradapter, der 2 Iterator über eine Funktion kombiniert. Vielleicht hab ich mit falschen Stichwörtern gesucht, aber bis jetzt hab ich weder in der STL noch in Boost irgendwas passendes gefunden.

    Ziel ist es, sowas machen zu können:

    std::vector<int> vA, vB;
    
    combine_iterator begin(vA.begin(), vB.begin(), std::multiplies<int>());
    combine_iterator end(vA.end(), vB.end());
    
    // irgendwas damit machen, z.B.
    int sum = std::accumulate(begin, end, 0);
    // sum = vA[0]*vB[0] + vA[1]*vB[1] + ...
    

    Das ist irgendwie so nützlich (und allgemein gehalten), dass wird es doch bestimmt schon geben...
    Kennt da irgendjemand was passendes, oder muss ich mir das selber basteln?



  • In Deinem speziellen Fall kannst Du auch einfach std::inner_product statt std::accumulate nehmen.



  • boost zip_iterator

    http://www.boost.org/doc/libs/1_42_0/libs/iterator/doc/zip_iterator.html#examples

    std::for_each(
      boost::make_zip_iterator(
        boost::make_tuple(beg1, beg2)
        ),
      boost::make_zip_iterator(
        boost::make_tuple(end1, end2)
        ),
      zip_func()
      );
    


  • std::transform müsste eigentlich alles bieten, was du brauchst. Ist allerdings fürchterlich unleserlich.



  • Sebastian Pizer schrieb:

    In Deinem speziellen Fall kannst Du auch einfach std::inner_product statt std::accumulate nehmen.

    Für diesen speziellen Fall auf jeden Fall super, danke.

    Der zip_iterator von Boost sieht auch interessant aus, wusste ichs doch, dass ich was übersehen hab.

    Danke für die Hilfe.


Anmelden zum Antworten