बूस्ट के Function Output Iterator आप क्या चाहते हैं कर सकते हैं:
std::size_t count = 0u;
int arr[]{0, 1, 2, 3};
std::copy(std::begin(arr), std::end(arr),
boost::make_function_output_iterator([&](auto const&) { ++count; }));
assert(count == 4u);
केवल मुद्दा आप इटरेटर बाहर गिनती चर घोषित करने के लिए है कि है, कोई रास्ता नहीं एक boost::function_output_iterator
से संग्रहीत समारोह वस्तु को निकालने के लिए है, क्योंकि (और लैम्बडा से बंद मूल्यों को निकालने का कोई भी तरीका नहीं है, भले ही आप उस बाधा से पहले हो)। यदि आप एक-लाइनर लिखने में सक्षम होना चाहते हैं, तो आपको इसे इटरेटर क्लास लिखना होगा, लेकिन यह कोड की एक बड़ी मात्रा नहीं है; उदाहरण के लिए:
class counting_output_iterator {
public:
using iterator_category = std::output_iterator_tag;
using value_type = void;
using difference_type = void;
using pointer = void;
using reference = void;
std::size_t value = 0u;
struct output_proxy {
output_proxy(std::size_t& value) : m_value(value) { }
template<class T> output_proxy& operator=(T const&) {
++m_value;
return *this;
}
std::size_t& m_value;
};
output_proxy operator*() { return output_proxy(value); }
counting_output_iterator& operator++() { return *this; }
counting_output_iterator& operator++(int) { return *this; }
};
उपयोग:
int arr[]{0, 1, 2, 3};
auto const count = std::copy(std::begin(arr), std::end(arr),
counting_output_iterator{}).value;
assert(count == 4u);
वोटिंग एक संसाधन अनुरोध के रूप में बंद करने के लिए, लेकिन आप चाहते हो सकता है [ 'बढ़ावा देने :: counting_iterator'] (http://www.boost.org/doc/libs/1_50_0/libs/iterator/doc/counting_iterator। एचटीएमएल) – NathanOliver
आपका प्रश्न थोड़ा अस्पष्ट है: आप जानना चाहते हैं कि चौराहे की गणना किए बिना 2 सेटों के चौराहे में कितने तत्व होंगे? – wasthishelpful
@wasthishelpful हाँ, set_difference के मेरे उदाहरण में, लेकिन मैं इस तरह के एल्गोरिदम के लिए एक सामान्य ओप्यूट इटरेटर समाधान की तलाश में हूं। – T33C