Efficiently initialise std::set with a sequence of numbers

后端 未结 5 1829
野的像风
野的像风 2020-12-31 01:29

An obvious (naive?) approach would be:

std::set s;
for (int i = 0; i < SIZE; ++i) {
    s.insert(i);
}

That\'s reasonable rea

5条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-31 01:52

    #include 
    #include 
    #include 
    
    int main()
    {
        std::set s;
        int i = 0;
        std::generate_n(std::inserter(s, s.begin()), 10, [&i](){ return i++; });
    }
    

    This is (I think) equivalent to your second version, but IMHO looks much better.

    C++03 version would be:

    struct inc {
        static int i;
        explicit inc(int i_) { i = i_; }
        int operator()() { return i++; }
    };
    
    int inc::i = 0;
    
    int main()
    {
        std::set s;
        std::generate_n(std::inserter(s, s.end()), SIZE, inc(0));
    }
    

提交回复
热议问题