2013-03-26 2 views
9

पर लिखने के लिए कैसे लिखें यदि मेरे पास std::ostringstream ऑब्जेक्ट oss कहलाता है, तो मुझे लगता है कि मैं स्ट्रिंग को मुद्रित करने के लिए std::cout << oss.str() कर सकता हूं। लेकिन oss.str() करने के परिणामस्वरूप लौटाई गई स्ट्रिंग की प्रतिलिपि बनाई जाएगी। क्या अंतर्निहित streambuf सीधे प्रिंट करने का कोई तरीका है?ओस्ट्रिंगस्ट्रीम को सीधे

अग्रिम धन्यवाद!

उत्तर

9

यदि आप std::ostringstream का उपयोग कर रहे हैं तो नहीं। इसके लिए अंतर्निहित बफर को पढ़ा नहीं जा सकता है (इसलिए oostringstream में), इसलिए आपको str() के माध्यम से इसे करने के लिए कार्यान्वयन पर भरोसा करना होगा।

हालांकि, अगर आप std::stringstream का उपयोग करें (o की कमी ध्यान दें), तो अंतर्निहित बफर पढ़ी जा सकती है, और basic_ostream की एक विशेष अधिभार बफ़र्स से forreading है:

#include <iostream> 
#include <sstream> 

int main() 
{ 
    std::stringstream ss1; 
    ss1 << "some " << 111605 << " stuff" << std::flush; 

    std::cout << ss1.rdbuf() << std::endl; 
    std::cout << ss1.str() << std::endl; 
} 

आउटपुट:

कुछ 111,605 सामान
कुछ 111,605 सामान

(Example derived from here।)

यह मध्यवर्ती प्रतिलिपि के बिना अंतर्निहित बफर से सीधे प्रतिलिपि बनाता है।

+0

धन्यवाद! आपका समाधान काम करता है। मुझे यह पोस्ट http://stackoverflow.com/questions/10009809/query-stdostringstream-content/10010160#10010160 भी मिला जहां ओस्ट्रीम का उपयोग एक ही चीज़ को प्राप्त करने के लिए किया जाता है। मैं बस सोच रहा था कि ओस्ट्रीम और स्ट्रिंगस्ट्रीम का उपयोग करने के बीच क्या अंतर है। कौन सा अधिक प्रदर्शनकारी है? –

+0

@ विंस्टन हूआंग: आपको यह देखने के लिए प्रोफाइल करना होगा कि कौन सा प्रदर्शन करने वाला है। मुझे संदेह है कि यह किसी भी तेज़ है, और यह निश्चित रूप से 'std :: stringstream' का उपयोग करने से अधिक जटिल है। – GManNickG

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