मैं उदाहरण के साथ दिखाऊंगा, नीचे दिए गए उदाहरण वेक्टर से विषम तत्वों को हटाते हैं:
void test_del_vector(){
std::vector<int> vecInt{0, 1, 2, 3, 4, 5};
//method 1
for(auto it = vecInt.begin();it != vecInt.end();){
if(*it % 2){// remove all the odds
it = vecInt.erase(it);
} else{
++it;
}
}
// output all the remaining elements
for(auto const& it:vecInt)std::cout<<it;
std::cout<<std::endl;
// recreate vecInt, and use method 2
vecInt = {0, 1, 2, 3, 4, 5};
//method 2
for(auto it=std::begin(vecInt);it!=std::end(vecInt);){
if (*it % 2){
it = vecInt.erase(it);
}else{
++it;
}
}
// output all the remaining elements
for(auto const& it:vecInt)std::cout<<it;
std::cout<<std::endl;
// recreate vecInt, and use method 3
vecInt = {0, 1, 2, 3, 4, 5};
//method 3
vecInt.erase(std::remove_if(vecInt.begin(), vecInt.end(),
[](const int a){return a % 2;}),
vecInt.end());
// output all the remaining elements
for(auto const& it:vecInt)std::cout<<it;
std::cout<<std::endl;
}
उत्पादन नीचे जगा:
024
024
024
ध्यान रखें, विधि erase
पारित पुनरावृत्ति के अगले पुनरावृत्ति लौटाएगी।
से यहाँ , तो हम अधिक उत्पन्न विधि का उपयोग कर सकते हैं:
template<class Container, class F>
void erase_where(Container& c, F&& f)
{
c.erase(std::remove_if(c.begin(), c.end(),std::forward<F>(f)),
c.end());
}
void test_del_vector(){
std::vector<int> vecInt{0, 1, 2, 3, 4, 5};
//method 4
auto is_odd = [](int x){return x % 2;};
erase_where(vecInt, is_odd);
// output all the remaining elements
for(auto const& it:vecInt)std::cout<<it;
std::cout<<std::endl;
}
उपयोग करने के तरीके को देखने के लिए यहां देखें std::remove_if
।
https://en.cppreference.com/w/cpp/algorithm/remove
std::remove_if
एक विधेय के साथ उपयोग कर सकते हैं जो "सामान करता है" और यदि आप हटाए गए तत्व को चाहते हैं तो यह सच है।