मैं मिटाना विधि का उपयोग कर एक वेक्टर से एक तत्व को साफ करना चाहता हूं। लेकिन यहां समस्या यह है कि तत्व केवल एक बार वेक्टर में होने की गारंटी नहीं है। यह कई बार मौजूद हो सकता है और मुझे उन सभी को साफ करने की आवश्यकता है। मेरा कोड कुछ इस तरह है:
void erase(std::vector<int>& myNumbers_in, int number_in)
{
std::vector<int>::iterator iter = myNumbers_in.begin();
std::vector<int>::iterator endIter = myNumbers_in.end();
for(; iter != endIter; ++iter)
{
if(*iter == number_in)
{
myNumbers_in.erase(iter);
}
}
}
int main(int argc, char* argv[])
{
std::vector<int> myNmbers;
for(int i = 0; i < 2; ++i)
{
myNmbers.push_back(i);
myNmbers.push_back(i);
}
erase(myNmbers, 1);
return 0;
}
यह कोड स्पष्ट रूप से क्रैश हो जाता है क्योंकि मैं इसके माध्यम से पुनरावृत्ति करते हुए वेक्टर के अंत को बदल रहा हूं। इस लक्ष्य को हासिल करने का सबसे अच्छा तरीका क्या है? यानी, वेक्टर के माध्यम से कई बार पुनरावृत्ति किए बिना या वेक्टर की एक और प्रतिलिपि बनाने के बिना ऐसा करने का कोई तरीका है?
std::remove()
ऐसे तत्वों को स्थानांतरित करता है जिन्हें हटाने के लिए तत्वों को ओवरराइट किया जाता है। एल्गोरिथ्म कंटेनर के आकार को नहीं बदलता है, और यदिn
तत्व हटा दिए जाते हैं, तो यह अपरिभाषित है कि अंतिमn
तत्व क्या हैं ।