boost::range
kitaplığından geçiyorum ve boost :: range_iterator ve boost::iterator_range
öğelerini fark ettim. Burada bu terimlerle karıştırıldım. Herkes, iki arasındaki farkın ne olduğunu ve ne zaman kullanılacağını açıklayabilir mi? Ayrıca, genişletme aralığı kitaplığının belgelerin dışında daha fazlasını tanımak için kullanıldığı örnekleri örneklemeye yönlendirebilirseniz çok güzel olur. Teşekkürlerboost :: range_iterator ve boost :: iterator_range karışıklığı
cevap
İki kişi arasındaki farkın ne olduğunu ve ne zaman kullanılacağını açıklayabilir misiniz?
range_iterator şu şekilde aralığı yineleyici olsun türü için kullanılır:
range_iterator<SomeRange>::type
Bu simillar std::iterator_traits için bir şey. Örneğin, İlerleticiden değer türünü alabilirsiniz:
std::iterator_traits<int*>::value_type
iterator_range aralıkları ve yineleyiciler arasındaki köprüdür. Örneğin - yineleyici çiftiniz var ve bunları yalnızca aralık kabul eden algoritmaya yönlendirmek istiyorsunuz. Bu durumda yineleyicilerinizi iterator_range kullanarak kapsama alabilirsiniz. Ya da daha - make_iterator_range - bu tipini anlar yardımcı olacaktır (std gibi :: make_pair yapar):
make_iterator_range(iterator1,iterator2)
döner değişir. boost aralığı kütüphane dışında bu konuda daha fazla bilgi edinmek için kullanılır nerede örnekleri örneklemek için beni işaret edebilir Ayrıca
#include <boost/range/iterator_range.hpp>
#include <boost/range/algorithm.hpp>
#include <boost/range/iterator.hpp>
#include <typeinfo>
#include <iostream>
#include <ostream>
using namespace boost;
using namespace std;
struct print
{
template<typename T>
void operator()(const T &t) const
{
cout << t << " ";
}
};
int main()
{
typedef int Array[20];
cout << typeid(range_iterator<Array>::type).name() << endl;
Array arr={11,22,33,44,55,66,77,88};
boost::for_each(make_iterator_range(arr,arr+5) ,print());
}
, çok güzel olurdu:
Örneğin aşağıdaki düşünün hızlı özeti için dokümantasyon
- check this slides
Genel olarak, boost::range_iterator
'u doğrudan kullanmazsınız, çünkü verilen aralığı alan (aralığın türüne bakmaksızın) bir şablon meta işlevidir ve begin()/end() yöntemlerinin türünü döndürür. Önceden varolan yineleyicilerden yeni bir dizi oluşturmak için
boost::iterator_range
kullanılır. Bu, genellikle hala yineleyici tabanlı bir kod alırken ve bunu bir aralığa dönüştürmek için kullanıldığında, kullanım olasılığınız daha yüksek olacaktır.
- 1. Boost :: asio ve boost :: thread
- 2. Boost
- 3. boost :: tokenizer vs boost :: bölme
- 4. Qt ve Boost RPC
- 5. boost :: boost :: throw_exception nedeniyle derleme yapılamıyor ::
- 6. Tek tek Boost kütüphaneleri ile derleme, Boost
- 7. boost :: function and boost :: bind work
- 8. Boost, VS2005
- 9. Boost :: graph
- 10. Boost :: Archive
- 11. boost ruhu
- 12. Boost :: asio,
- 13. boost asio ve coroutine2 örnek
- 14. Boost :: Python and Boost :: ile ilgili sorunlar Sorunlar ::
- 15. Boost shared_ptr Kullanılıyor
- 16. kullanma boost :: yineleyici
- 17. Boost Solr sonuçları,
- 18. Boost Plugin seçenekleri
- 19. boost :: filesystem :: is_directory
- 20. Boost Python'un Performansı
- 21. boost :: filesystem :: recursive_directory_iterator
- 22. Boost ptime'dan yıl kazanın
- 23. boost :: C++ 11
- 24. Boost Günlüğü: BOOST_LOG_GLOBAL_LOGGER_INIT
- 25. Operatör önceliği boost :: spirit?
- 26. boost :: property_tree :: ptree
- 27. boost Son pencereler
- 28. boost :: asio UDP yayını
- 29. boost :: regexp'in beklenmedik davranış
- 30. Boost derleme hatası