repeat bei boost::assign verwenden



  • Hi,

    ich habe folgende Code-Blocks:

    vector<int> v;
    v += 1,repeat(10,4);
    

    und

    vector<int> w;
    w += repeat(10,4);
    

    Den ersten kann man kompilieren, der zweite meldet

    g++ -c -o jphmm_interface.o jphmm_interface.cpp -Wall -O3 -DNDEBUG -I/home/ingo/libs/boost -I/home/ingo/libs/gsl/include
    /home/ingo/libs/boost/boost/assign/list_inserter.hpp: In member function »void boost::assign_detail::call_push_back<C>::operator()(T) [with T = boost::assign_detail::repeater<int>, C = std::vector<int, std::allocator<int> >]«:
    /home/ingo/libs/boost/boost/assign/list_inserter.hpp:272:   instantiated from »boost::assign::list_inserter<Function, Argument>& boost::assign::list_inserter<Function, Argument>::operator()(const T&) [with T = boost::assign_detail::repeater<int>, Function = boost::assign_detail::call_push_back<std::vector<int, std::allocator<int> > >, Argument = int]«
    /home/ingo/libs/boost/boost/assign/std/vector.hpp:31:   instantiated from »boost::assign::list_inserter<boost::assign_detail::call_push_back<std::vector<_Tp, _Alloc> >, V> boost::assign::operator+=(std::vector<_Tp, _Alloc>&, V2) [with V = int, A = std::allocator<int>, V2 = boost::assign_detail::repeater<int>]«
    jphmm_interface.cpp:201:   instantiated from here
    /home/ingo/libs/boost/boost/assign/list_inserter.hpp:68: Fehler: keine passende Funktion für Aufruf von »std::vector<int, std::allocator<int> >::push_back(boost::assign_detail::repeater<int>&)«
    /usr/include/c++/4.3/bits/stl_vector.h:686: Anmerkung: Kandidaten sind: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = int, _Alloc = std::allocator<int>]
    

    Weiss jemand, wie man hier repeat zu verwenden hat?


  • Administrator

    repeat funktioniert nur innerhalb eines Boost.Assign Ausdruckes. Man kann es nicht alleinstehend verwenden. Es gibt allerdings ein paar hilfreiche Memberfunktionen im Rückgabetyp vom boost::assign::list_of :

    #include <boost/assign.hpp>
    
    #include <vector>
    
    int main()
    {
    	using namespace boost::assign;
    
    	std::vector<int> v = list_of<int>().repeat(10, 4);
    
    	return 0;
    }
    

    Grüssli



  • Dravere schrieb:

    std::vector<int> v = list_of<int>().repeat(10, 4);
    

    Ich habe gerade festgestellt, dass das dazu fuehrt, dass v die Werte

    0 4 4 4 4 4 4 4 4 4 4
    

    enthaelt.

    Von daher: Weiss jemand, wie man das richtig (und moeglichst kurz) macht?



  • was möchtest du denn?
    den vektor einfach nur mit 10 werten füllen, die alle 4 sind?
    da gibts doch nen extra konstruktor für...

    std::vector<int> arr(10, 4);
    
    std::cout << "Inhalt:\r\n";
    std::copy(arr.begin(), arr.end(), std::ostream_iterator<char>(std::cout, "\r\n"));
    std::cout << std::flush;
    

    bb


Anmelden zum Antworten