मैं एक छोटा प्रोग्राम बनाने की कोशिश कर रहा हूं जो बाद में प्रोजेक्ट में उपयोग के लिए आईएनआई फाइलों को संसाधित करता है, पहले स्मृति में लोड होने के बाद अपने आकार को कम करके। इस प्रकार,स्ट्रिंग्स के वेक्टर से खाली तत्वों को हटाकर
जहां vLine एक वेक्टर फ़ाइल सामग्री
for (unsigned int i = 0; i < vLine.size(); i++)
{
if (!vLine[i].find(';', 0))
{
vLine[i].erase();
}
}
मुद्रण vLine पर युक्त है, मैं इस तरह के
के रूप में रिक्त स्थान है, जहां एक बार एक पंक्ति एक सेमी-कोलन के साथ शुरुआत से ही अस्तित्व में, के साथ छोड़ दिया हो जाएगा1.
2. property
3. property
4.
5. property
आकार का उपयोग करना() इन रिक्त हिस्सों को हटाने के बजाय सूची से अंतिम तत्व को निकालने के लिए प्रतीत होता है। वही समस्या मौजूद है जहां मैं उन रेखाओं को हटाता हूं जिनमें केवल मिटाएं() के साथ व्हाइटस्पेस होता है।
क्या vLine के आदेश को संरक्षित करते समय इन खाली तत्वों को निकालना संभव है?
(इस में iterators का उपयोग नहीं कर के लिए क्षमा याचना।)
पुन:
क्या आप क्या करना चाहते करने के लिए मानक और सरल तरीका
std::remove_if
है? –उनके उचित उपयोग के बारे में ज्ञान की कमी। ऐसा लगता है (लग रहा था?) उनके बिना ऐसा करने के लिए संभव है। – JGrey
आप स्ट्रिंग की सामग्री को मिटाने के बजाय वेक्टर से लाइनों को हटा सकते हैं (जो 'vLine [i] .erase() 'करता है, नहीं? कॉल' vLine.erase() 'क्योंकि' वेक्टर 'से मिटा देता है फिर फ़ाइल को फिर से लिखें। ऐसा करने का एक बेवकूफ तरीका सी ++ है [मिटाएं-हटाएं मुहावरे] (http://en.wikipedia.org/wiki/Erase-remove_idiom), हालांकि आप 'std :: remove_if का उपयोग करना चाहते हैं '' से सशर्त का उपयोग करने के लिए। –
birryree