【问题标题】:What is the status of ranges in C++?C++ 中范围的状态是什么?
【发布时间】:2011-05-12 08:07:48
【问题描述】:

有时我厌倦了所有这些my_vector.begin(), my_vector.end() 噪音。去年在 boostcon 上,Andrei Alexandrescu 的主题演讲题目是Iterators Must Go (video)

在 C++ 中引入范围有什么进展,所以我终于可以说std::sort(my_vector)了?

【问题讨论】:

  • @Mike:希望。
  • 我也希望有朝一日...不过我觉得 Alexandrescu 的演讲题目有点过于离题了。如果不是迭代器,像lower_bound 这样的算法应该返回什么?
  • @FredOverflow: 啊,但这不一样,尤其是当相等的范围很长时,lower_bound 的计算速度更快,这就是如果你知道在哪里插入所需要的一切不在乎订单。
  • 范围会比迭代器好。范围基本上是迭代器做得更好一点。但是,我们当然不想要两者,我敢肯定。
  • @MikeDeSimone 不完全是,但有一个明确的进展可以使 C++ 更好、更易于访问、更具表现力和更易于使用。由于 Python 有许多相同的目标,因此它们最终有一些相似之处也就不足为奇了...... :)

标签: c++ stl c++11 iterator range


【解决方案1】:

C++ 中的Range 体验还不够。
作为目前的实验性实现,有 Boost.Range 2.0 和 Oven Range Library。

【讨论】:

  • 每个标准算法都包含在 boost 库中,所以至少boost::sort(my_vector)(如果不是std::sort)是现在,而不是未来。
【解决方案2】:

据我所知,在这方面没有取得任何进展。

【讨论】:

    【解决方案3】:
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    
    template< class Container >
    void sort( Container& c ) { sort( c.begin(), c.end() ); }
    
    int main()
    {
        using namespace std;
    
        int const           data[]  = {3, 1, 4, 1, 5, 9, 2, 6, 5, 4};
        vector<int>         v( data, data + sizeof( data )/sizeof( *data ) );
    
        sort( v );
        copy( v.begin(), v.end(), ostream_iterator<int>( cout, " " ) );
    }
    

    当然,将成员函数调用 beginend 替换为调用 startOfendOf(您的版本),至少在 C++0x 之前...

    【讨论】:

    • boost::begin 和 boost::end 工作,直到您支持 std::begin 和 std::end。
    • 这不能回答问题,不是吗?
    • @Klaim:它回答了其中一个问题,OP 表示希望能够“最后说std::sort(my_vector)”。诺亚回答了主要问题。无论如何,不​​要因为坚持一定有问题而破坏了一个好的答案。干杯&hth.,
    • 这个答案比“是/否”的答案更有趣。所以值得一票。 kthx.
    • 我不同意,因为这是一个显而易见的答案。问题更多的是制定这个标准,而不是提供解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2012-05-29
    • 2019-08-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多