मैं boost::range
लाइब्रेरी के माध्यम से जा रहा हूं और बढ़ावा दिया :: range_iterator और boost::iterator_range
। मैं यहां इन शर्तों से उलझन में हूं। क्या कोई यह बता सकता है कि दो के बीच क्या अंतर है और कब उपयोग करना है? साथ ही, यह अच्छा होगा अगर आप मुझे नमूना उदाहरणों पर इंगित कर सकें जहां बूस्ट रेंज लाइब्रेरी का उपयोग दस्तावेज के अलावा इसके बारे में अधिक जानने के लिए किया जाता है। धन्यवादboost :: range_iterator और boost :: iterator_range भ्रम
उत्तर
क्या कोई यह बता सकता है कि दो के बीच क्या अंतर है और क्या उपयोग करना है?
range_iterator निम्नलिखित तरीके से सीमा इटरेटर के प्रकार के प्राप्त करने के लिए प्रयोग किया जाता है:
range_iterator<SomeRange>::type
यह std::iterator_traits के लिए कुछ में simillar। मसलन, आप पुनरावर्तक से मान प्रकार प्राप्त कर सकते हैं:
std::iterator_traits<int*>::value_type
iterator_range पर्वतमाला के बीच और iterators पुल नहीं है। उदाहरण के लिए - आपके पास इटरेटर की जोड़ी है, और आप उन्हें एल्गोरिदम में भेजना चाहते हैं जो केवल श्रेणियों को स्वीकार करता है। उस स्थिति में आप iterator_range का उपयोग करके अपने इटरेटर को रेंज में लपेट सकते हैं। या बेहतर - make_iterator_range - यह प्रकार अनुमान करने में मदद मिलेगी (एसटीडी की तरह :: make_pair करता है):
make_iterator_range(iterator1,iterator2)
रिटर्न सीमा होती है।
#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());
}
इसके अलावा, यह अच्छा होगा अगर तुम मुझे इंगित कर सकते हैं उदाहरण के नमूने के लिए जहां बढ़ावा रेंज पुस्तकालय से अलग इस बारे में अधिक पता करने के लिए प्रयोग किया जाता है:
उदाहरण निम्नलिखित पर विचार करें प्रलेखन
त्वरित सारांश के लिए - जाँच this slides
012,351,आम तौर पर, आप सीधे boost::range_iterator
का उपयोग नहीं करेंगे, क्योंकि यह एक टेम्पलेट मेटाफंक्शन है जो सीमा प्रदान करता है (सीमा के प्रकार के बावजूद), और इसके प्रारंभ()/end() विधियों के प्रकार को लौटाता है।
boost::iterator_range
का उपयोग पूर्व-मौजूदा इटरेटर्स की एक जोड़ी से नई सीमा बनाने के लिए किया जाता है। यह आमतौर पर उपयोग करने की अधिक संभावना होगी, आमतौर पर कोड लेते समय जो अभी भी इटेटरेटर आधारित है और इसका उपयोग किसी श्रेणी में कनवर्ट करने के लिए किया जाता है।
- 1. regex: boost :: xpressive vs boost :: regex
- 2. boost :: lock_guard vs boost :: mutex :: scoped_lock
- 3. Boost python
- 4. Boost Regex
- 5. Boost :: Asio
- 6. `boost :: variant`
- 7. Boost :: test
- 8. mmap() एलडी_PRELOAD और boost :: इंटरप्रोसेस
- 9. boost :: asio, threads और सिंक्रनाइज़ेशन
- 10. boost :: shared_ptr और गतिशील कास्ट
- 11. Boost के program_options
- 12. पुन: boost :: make_transform_iterator
- 13. Async Boost Asio
- 14. boost Shared_pointer NULL
- 15. Boost Shared_Ptr असाइनमेंट
- 16. boost shared_from_this <>()
- 17. boost :: program_options - आईएनआई फ़ाइल
- 18. boost :: asio, asynchronous read error
- 19. boost :: asio :: async_write, 65536 बाइट्स
- 20. अगर हमारे पास boost :: bind है तो boost :: mem_fn का उपयोग करने का क्या मतलब है?
- 21. const boost :: array <T,N> या boost :: array <const T,N>?
- 22. boost :: unit_test का उपयोग कैसे करें?
- 23. कैसे जांचें कि boost :: deadline_timer सक्रिय है
- 24. टेम्पलेट फ़ंक्शन के लिए 'typedef' (boost :: make_shared)
- 25. boost :: asio async_accept कनेक्शन को अस्वीकार करें
- 26. boost :: date_time, g ++ - 4.7.0, संकलन त्रुटि
- 27. पार्सिंग एलपीटीस्ट्र * कमांड लाइन boost :: program_options
- 28. `boost :: log_mt_posix :: basic_attribute_set <char> :: ~ basic_attribute_set() '
- 29. boost program_options: मदद बनाम सार्थक विकल्प
- 30. boost :: mutex :: ~ mutex(): Assertion `! Pthread_mutex_destroy (& m) 'असफल