मैं तत्वों है कि मैं पर काम करने की जरूरत है की एक संग्रह है एक वेक्टर के सभी तत्वों को खोजने के लिए, संग्रह पर सदस्य कार्यों बुला:एसटीएल का उपयोग कर
std::vector<MyType> v;
... // vector is populated
बुला कोई तर्क के साथ काम करता है यह बहुत सीधी-सपाट है के लिए :
std::for_each(v.begin(), v.end(), std::mem_fun(&MyType::myfunc));
एक समान काम किया जा सकता है यदि मैं जिस फ़ंक्शन को कॉल करना चाहता हूं उसके लिए एक तर्क है।
मेरी समस्या यह है कि यदि वे कुछ शर्तों को पूरा करते हैं तो वे वेक्टर में तत्वों पर एक फ़ंक्शन कॉल करना चाहते हैं। std::find_if
भविष्यवाणी की शर्तों को पूरा करने वाले पहले तत्व को एक पुनरावर्तक देता है।
std::vector<MyType>::iterator it =
std::find_if(v.begin(), v.end(), MyPred());
मैं विधेय बैठक सभी तत्वों खोजने के लिए और उन पर संचालित करने के लिए कामना करता हूं। बराबर, या एक तरह से मैं मौजूदा एसटीएल साथ ऐसा कर सकते हैं (जैसे कि मैं केवल एक बार पुनरावृति करने की जरूरत है), बजाय रोलिंग
मैं एक "find_all
" या "do_if
" के लिए एसटीएल एल्गोरिदम को देखकर किया गया है मेरी लूप और तुलना के लिए एक मानक पुनरावृत्ति या बस एक मानक पुनरावृत्ति करें।
विभाजन एक सामान्य स्थिति में काम करेगा लेकिन यह काम नहीं करेगा इस विशिष्ट मामले के लिए, वेक्टर के रूप में नहीं बदल सकते हैं:
फिर भी, अगर आप एक अक्षम
end()
को लेकर चिंतित हैं, तो आप इस कोड का उपयोग कर सकते । – twokats