2012-08-25 14 views
18

मुझे string::append() के बजाय stringstream का उपयोग कब करना चाहिए? मान लीजिए कि मैं सिर्फ तारों को पकड़ने जा रहा हूं।स्ट्रिंगस्ट्रीम के बजाय स्ट्रिंग का उपयोग कब करना चाहिए?

stringstream ss; 
ss << str1 << "str2" << ... 
Write(ss.str()); 

या:

string str; 
str.reserve(10000); 
str.append(str1); 
str.append("str2"); 
... 
Write(str); 

उनमें से कौन तेज है?

उत्तर

17

मुझे नहीं पता कि कौन सा तेज़ होगा, लेकिन अगर मुझे लगता है कि मैं कहूंगा कि आपका दूसरा उदाहरण है, खासकर जब आपने reserve सदस्य फ़ंक्शन को विस्तार के लिए एक बड़ी जगह आवंटित करने के लिए कहा है।

यदि आप केवल स्ट्रिंग्स को जोड़ रहे हैं तो string::append (या string::operator+=) का उपयोग करें।

आप अपने स्ट्रिंग प्रतिनिधित्व करने के लिए संख्या परिवर्तित करने के लिए, साथ ही रूपांतरण के दौरान उन्हें प्रारूप, और फिर एक साथ रूपांतरण परिणामों संलग्न, उपयोग stringstreams जा रहे हैं। मैं स्वरूपण भाग का स्पष्ट रूप से उल्लेख करता हूं क्योंकि यदि आपको प्रारूपण की आवश्यकता नहीं है तो C++ 11 std::to_string प्रदान करता है जिसका उपयोग संख्यात्मक प्रकारों को तारों में परिवर्तित करने के लिए किया जा सकता है।

14

string.append बहुत तेज़ है। खासकर जब आप आरक्षित करते हैं।

यदि आप केवल तारों को जोड़ रहे हैं, तो मैं स्ट्रिंग.एपेंड का उपयोग करूंगा। जब मैं स्वचालित रूप से उदाहरण के लिए तार करने के लिए गैर तार बदलने की आवश्यकता मैं केवल stringstream का प्रयोग करेंगे:

const int x(42); 
stringstream ss; 
ss << "My favorite number is: " << x << std::endl; 

यहाँ stringstream स्वचालित रूप से एक स्ट्रिंग के लिए एक्स धर्मान्तरित और यह जोड़ता है। मुझे atoi कॉल करने की जरूरत नहीं है। स्ट्रिंगस्ट्रीम आपके लिए स्वचालित रूप से सभी मूल प्रकारों को परिवर्तित कर देगा। यह उस उद्देश्य के लिए बहुत अच्छा है।

यदि आप केवल स्ट्रिंगस्ट्रीम में डेटा को निर्देशित करने जा रहे हैं तो इसे बाद में एक स्ट्रिंग में परिवर्तित करने के लिए। आप ostringstream का उपयोग कर सकते हैं जो आउटपुट के लिए है।

मुझे उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे

 संबंधित मुद्दे