दिलचस्प पोस्ट
रिफ्लेक्शन का इस्तेमाल करते हुए आंतरिक कक्षा का उपयोग कैसे करें स्विफ्ट में NSNotificationCenter addObserver यह देखने के लिए सबसे अच्छा तरीका है कि डेटा तालिका में एक रिक्त मान है या नहीं डिज़ाइन लिब – कोर्डिनेटर लेआउट / कोलमटिंग टूलबार, ग्रिड दृश्य / सूची दृश्य के साथ लेआउट AddSild और AddAttribute में पाठ मानों के सरल एक्सएमलेमेंट के हैंडलिंग के पीछे तर्क MySQL में शून्य के लिए मान सेट करें एक वेक्टर को अवरोही क्रम में क्रमबद्ध करना mysql ट्रिगर संग्रहित ट्रिगर पहले से ही कथन द्वारा उपयोग किया जाता है जो संग्रहीत ट्रिगर लागू किया गया था मैं फ़ाइल नाम में उपयोग करने के लिए उपयुक्त प्रारूप में, विंडोज कमांड लाइन पर वर्तमान डेटटाइम कैसे प्राप्त करूं? पोस्ट इन्वैडेटट () क्या करता है? .NET प्रक्रिया मॉनिटर एसक्यूएल – कई-से-कई टेबल प्राथमिक कुंजी SQL सर्वर ड्राइवर का उपयोग कर PDO के माध्यम से SQL सर्वर से कनेक्ट करें संख्याओं वाले आईडी के साथ क्वेरी सेलेक्टर का उपयोग करना कैसे जाँचें कि क्या स्ट्रिंग में केवल जावा में अंक होते हैं

लूप के अंदर एक वेक्टर के तत्व निकालें

मुझे पता है कि इस एक के समान प्रश्न हैं, लेकिन मैंने अपने सहायता से अपने कोड के रास्ते खोजने का प्रबंधन नहीं किया। मैं केवल एक सदिश के एक तत्व को हटाना / निकालने के लिए चाहता हूं, इस लूप के अंदर इस तत्व की विशेषता को देखकर। मैं उसे कैसे कर सकता हूँ? मैंने निम्नलिखित कोड की कोशिश की लेकिन मुझे त्रुटि का अस्पष्ट संदेश मिला:

'ऑपरेटर =' फ़ंक्शन 'प्लेयर' में अनुपलब्ध है

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++) { if(it->getpMoney()<=0) it = allPlayers.erase(it); else ++it; } 

मुझे क्या करना चाहिए?

अद्यतन: क्या आपको लगता है कि प्रश्नकर्ता सदिश :: मिटाता है, एक ही समस्या से संबंधित है? क्या मुझे एक असाइनमेंट ऑपरेटर की आवश्यकता है? क्यूं कर?

Solutions Collecting From Web of "लूप के अंदर एक वेक्टर के तत्व निकालें"

आपको it लूप में बढ़ाना नहीं चाहिए:

 for (vector<Player>::iterator it=allPlayers.begin(); it!=allPlayers.end(); /*it++*/) <----------- I commented it. { if(it->getpMoney()<=0) it = allPlayers.erase(it); else ++it; } 

टिप्पणी की गई भाग पर ध्यान दें; it++ की आवश्यकता नहीं है, क्योंकि it शरीर के लिए स्वयं में वृद्धि हो रही है

त्रुटि के रूप में ' ' ऑपरेटर = 'फ़ंक्शन' प्लेयर 'में अनुपलब्ध है , यह erase() के उपयोग से आता है erase() जो कि वेक्टर में तत्वों को स्थानांतरित करने के लिए आंतरिक operator= का उपयोग करता है। erase() का उपयोग करने के लिए, क्लास Player की ऑब्जेक्ट असाइन करना आवश्यक है, जिसका अर्थ है कि आपको operator= Player क्लास के लिए कार्यान्वित operator=

पाश को भूल जाएं और एसटीडी या बढ़ावा देने वाली श्रेणी अलगॉरटेम्स का उपयोग करें।
बूस्ट का उपयोग करना। लेम्ब्डा में रेंज यह ऐसा दिखेगा:

 boost::remove_if( allPlayers, bind(&Player::getpMoney, _1)<=0 ); 
 if(allPlayers.empty() == false) { for(int i = allPlayers.size() - 1; i >= 0; i--) { if(allPlayers.at(i).getpMoney() <= 0) { allPlayers.erase( allPlayers.begin() + i ); } } } 

वेक्टर में तत्व निकालने का यह मेरा तरीका है यह समझना आसान है और किसी भी चाल की आवश्यकता नहीं है।

आपकी विशिष्ट समस्या यह है कि आपके Player वर्ग में असाइनमेंट ऑपरेटर नहीं है। आपको "प्लेयर" को एक सदिश से निकालने के लिए कॉपी करने योग्य या चलने योग्य बनाना चाहिए। इसका कारण यह है कि वेक्टर को सटे होने की ज़रूरत है और इसलिए जब आप तत्वों को हटाते हैं तब निर्मित अंतराल को भरने के लिए तत्वों को पुन: क्रमबद्ध करने की आवश्यकता होती है

इसके अलावा:

एसटीडी एल्गोरिथ्म का उपयोग करें

 allPlayers.erase(std::remove_if(allPlayers.begin(), allPlayers.end(), [](const Player& player) { return player.getpMoney() <= 0; }), allPlayers.end()); 

या यहां तक ​​कि अगर आप को बढ़ावा दिया है सरल:

 boost::remove_erase_if(allPlayers, [](const Player& player) { return player.getpMoney() <= 0; }); 

यदि आपके पास सी ++ 11 लैंबडा के लिए समर्थन नहीं है तो टीएमडब्ल्यू का उत्तर देखें।

या पीछे की ओर लूप करते हैं

 for (vector<Player>::iterator it = allPlayers.end() - 1; it != allPlayers.begin() - 1; it--) if(it->getpMoney()<=0) it = allPlayers.erase(it);