【问题标题】:The Best way to insert a range of consecutive integers without boost::counting_iterator在没有 boost::counting_iterator 的情况下插入一系列连续整数的最佳方法
【发布时间】:2015-05-12 20:39:07
【问题描述】:

在没有 boost::counting_iterator 的情况下插入一系列连续整数的最佳方法是什么。[c++]

    // Insert 1 to 9
    set<long> set1.insert(boost::counting_iterator<int>(1)
                          ,boost::counting_iterator<int>(10))

【问题讨论】:

  • 您的代码有效。你还想要什么?除此之外,您可以循环并插入。
  • 它可以工作,但我想不使用 boost 库。

标签: c++ iterator containers std


【解决方案1】:

在调用insert 的范围内的for 循环工作得很好,并使代码易于维护。

【讨论】:

    【解决方案2】:

    你可以使用:

    std::set<long> s;
    long l = 0;
    std::generate_n(std::inserter(s, s.end()), 9, [&]{ return ++l; });
    

    或者简单的循环:

    std::set<long> s;
    for (long i = 1; i != 10; ++i) {
        s.insert(i);
    }
    

    【讨论】:

    • 谢谢 jarod,但是它是否比带有位置提示的简单循环插入更快或相似?
    • @joejo:generated_n 方法需要一个“提示”,所以它相当于一个带有提示的插入循环。请注意,在大多数情况下,提示是错误的(s.end() 不会每次都重新计算)。
    猜你喜欢
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2018-12-05
    • 1970-01-01
    相关资源
    最近更新 更多