2009-04-27 13 views

उत्तर

7

चूंकि सी ++ 0x अभी तक अंतिम रूप नहीं दिया गया है, तो आप केवल हाल ही में draft पर एक नज़र डाल सकते हैं।

+2

मीठा रैप्टर यीशु, वहाँ यह है। – rlbond

+1

अब तक, सी ++ 0x बहुत अच्छी तरह से अंतिम रूप दिया गया है, और सबसे हालिया मसौदा अंतिम संस्करण के करीब है। –

+0

मैं सहमत हूं, मैं बस पढ़ रहा था कि जीसीसी 4.4 ड्राफ्ट के लिए पहले से ही कुछ समर्थन है। –

5

इस बीच में, यह बहुत मुश्किल अपनी खुद की copy_if()remove_copy_if() का उपयोग कर बनाने के लिए नहीं है:

#include <functional> 

struct my_predicate : std::unary_function<my_arg_type, bool> { 
    bool operator()(my_arg_type const& x) const { ... } 
}; 

// To perform "copy_if(x, y, z, my_predicate())", write: 
remove_copy_if(x, y, z, std::not1(my_predicate())); 

not1() अपने विधेय वर्ग की आवश्यकता है एक नेस्टेड प्रकार, argument_type आपूर्ति करने के लिए उपयोग करना, तर्क के प्रकार की पहचान - के रूप में ऊपर दिखाया गया है, ऐसा करने का एक सुविधाजनक तरीका unary_function<T, U> से प्राप्त करना है, जहां T तर्क प्रकार है।

4

बस पूर्णता के लिए, इस मामले में किसी को उसकी/उसके रास्ते इस सवाल का googles, यह अब है कि उल्लेख किया जाना चाहिए (में सी ++ 11 और बाद में) है एक copy if एल्गोरिथ्म। यह अपेक्षित व्यवहार करता है (तत्वों को एक सीमा में प्रतिलिपि बनाता है, जिसके लिए कुछ भविष्यवाणी एक और सीमा तक सच होती है)।

एक ठेठ उपयोग के मामले

std::vector<int> foo{ 25, 15, 5, -5, -15 }; 
std::vector<int> bar; 

// copy only positive numbers: 
auto it = std::copy_if (foo.begin(), foo.end(), std::back_inserter(bar), 
      [](int i){return !(i<0); 
      }); 
संबंधित मुद्दे