SORU
25 AĞUSTOS 2011, PERŞEMBE


Döngüler için temel bir dizi ile kullanmak için C 11 Aralık bir sınıf var mı?

Kendimi biraz önce bu yazı bulundu:

template <long int T_begin, long int T_end>
class range_class {
 public:
   class iterator {
      friend class range_class;
    public:
      long int operator *() const { return i_; }
      const iterator &operator   () {   i_; return *this; }
      iterator operator   (int) { iterator copy(*this);   i_; return copy; }

      bool operator ==(const iterator &other) const { return i_ == other.i_; }
      bool operator !=(const iterator &other) const { return i_ != other.i_; }

    protected:
      iterator(long int start) : i_ (start) { }

    private:
      unsigned long i_;
   };

   iterator begin() const { return iterator(T_begin); }
   iterator end() const { return iterator(T_end); }
};

template <long int T_begin, long int T_end>
const range_class<T_begin, T_end>
range()
{
   return range_class<T_begin, T_end>();
}

Ve bu bana, bu gibi şeyler yazabilirsiniz:

for (auto i: range<0, 10>()) {
    // stuff with i
}

Şimdi, yazdığım belki de en iyi kod olmadığını biliyorum. Ve belki de daha esnek ve kullanışlı hale getirmek için bir yol var. Ama bu standart bir parçası yapılmalı gibi bir şey gibi geliyor bana.

Öyle değil mi? Yeni kütüphane çeşit tamsayı veya hesaplanan skaler değerler genel bir dizi belki aralığında kullanımına eklendi?

CEVAP
25 AĞUSTOS 2011, PERŞEMBE


C standart Kütüphanesi, ama kesinlikle nitelendirir Boost.Range has boost::counting_range, yok. Ayrıca biraz kapsamında daha odaklı olan boost::irange kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NikkoNantone

    NikkoNantone

    21 Kasım 2011
  • RaquelGamesBR

    RaquelGamesB

    20 HAZİRAN 2009
  • ŠĩŗĜŕôŵåɭȍҭҭ

    ŠĩŗĜŕô

    29 Kasım 2009