Set std::vector to a range

后端 未结 5 949
天涯浪人
天涯浪人 2020-12-29 03:37

What\'s the best way for setting an std::vector to a range, e.g. all numbers between 3 and 16?

5条回答
  •  自闭症患者
    2020-12-29 03:41

    std::iota - is useful, but it requires iterator, before creation vector, .... so I take own solution.

    #include 
    #include 
    
    template struct seq{ typedef seq type;};
    
    template< typename I, typename J> struct add;
    template< int...I, int ...J>
    struct add< seq, seq > : seq{};
    
    
    template< int N>
    struct make_seq : add< typename make_seq::type, 
                           typename make_seq::type > {};
    
    template<> struct make_seq<0>{ typedef seq<> type; };
    template<> struct make_seq<1>{ typedef seq<0> type; };
    
    
    template
    std::initializer_list range_impl(seq )
    {
        return { (start + I*step) ...};
    }
    
    template
    std::initializer_list range()
    { 
        return range_impl(typename make_seq< 1+ (finish - start )/step >::type {} ); 
    }
    
    int main()
    {
        std::vector vrange { range<3, 16>( )} ;
    
        for(auto x : vrange)std::cout << x << ' ';
    
    }
    
    
    Output:
    
      3 4 5 6 7 8 9 10 11 12 13 14 15 16
    

提交回复
热议问题