Why was pair range access removed from C++11?

前端 未结 3 745
半阙折子戏
半阙折子戏 2020-12-02 12:08

I just discovered that at one point, the C++11 draft had std::begin/std::end overloads for std::pair that allowed treating a pair of i

3条回答
  •  隐瞒了意图╮
    2020-12-02 12:37

    expanding on the above answer using c++11 optimisations:

    #include 
    
    template
    struct range_t : public std::pair {
        using pair_t = std::pair;
        range_t(pair_t&& src)
        : std::pair(std::forward(src))
        {}
    
        using std::pair::first;
        using std::pair::second;
    
        Iter begin() const { return first; }
        Iter end() const { return second; }
    };
    
    template
    range_t range(std::pair p) {
        return range_t(std::move(p));
    }
    
    template
    range_t range(Iter i1, Iter i2) {
        return range_t(std::make_pair(std::move(i1), std::move(i2)));
    }
    
    
    // TEST: 
    
    #include 
    #include 
    using namespace std;
    
    int main() {
    
        multiset mySet { 6,4,5,5,5,3,3,67,8,89,7,5,45,4,3 };
    
        cout << "similar elements: ";
        for (const auto&i : range(mySet.lower_bound(5), mySet.upper_bound(10))) {
            cout << i << ",";
        }
        cout << "\n";
    
        int count = 0, sum = 0;
        for (const auto& i: range(mySet.equal_range(5)))
        {
            ++count;
            sum += i;
        }
        cout << "5 appears " << count << " times\n"
        << "the sum is " << sum << "\n";
    
    return 0;
    }
    

提交回复
热议问题