c++ - Move the string out of a std::ostringstream -
अगर मैं एक स्ट्रिंग का निर्माण करता हूं जो कि फिर मुझे एक परिणाम हालांकि, यह स्ट्रिंग सामग्री की एक अनावश्यक गहरी कॉपी का कारण होगा, क्योंकि क्या कोई है पूरी सामग्री को कॉपी किए बिना स्ट्रिंग बनाने का तरीका? यदि आप चाहते हैं कुछ स्ट्रिंग स्ट्रीमों को यातनाएं, आप संरक्षित इंटरफ़ेस का उपयोग करके बफ़र तक पहुंच सकते हैं: एक ऑटो-रिसाइजिंग आउटपुट स्ट्रीम बफ़र तक सीधे प्रवेश करने का मानक C ++ तरीका हालांकि, मुझे लगता है कि सबसे साफ (और तेज़) समाधान std :: ostringstream : <पूर्व>
std :: ostringstream ss; अहस्ताक्षरित int s = floatData.size (); (अहस्ताक्षरित int i = 0; i & lt; s; i ++) {एसएस & lt; & lt; फ्लोटडेटा [i] & lt; & lt; ""; }
std :: string में मिलता है:
std :: string textValues (ss.str ());
ss का अब और उपयोग नहीं किया जाएगा।
std :: ostringstream अपने इन-मेमरी बफर तक पहुंचने के लिए कोई सार्वजनिक इंटरफ़ेस प्रदान नहीं करता है, जब तक कि यह गैर-पोर्टेबल
pubsetbuf का समर्थन करता है (लेकिन तब भी आपका बफ़र तय-आकार, देखें)
#include & lt; iostream & gt; # शामिल करें & lt; sstream & gt; #include & lt; vector & gt; Struct my_stringbuf: std :: stringbuf {const char * my_str () const {रिटर्न pbase (); } // pptr बहुत उपयोगी हो सकता है}; Int main () {std :: vector & lt; float & gt; V = {1.1, -3.4, 1 / 7.0}; My_stringbuf buf; Std :: ostream ss (& buf); के लिए (अहस्ताक्षरित int i = 0; i & lt; v.size (); ++ i) एसएस & lt; & lt; V [i] & lt; & lt; ''; एसएस & lt; & lt; std :: समाप्त होता है; Std :: cout & lt; & lt; Buf.my_str () & lt; & lt; '\ N'; }
std :: oststream , C ++ 98 में पदावनत द्वारा प्रस्तुत किया जाता है, लेकिन अभी भी मानक सी ++ 14 और गिनती <पूर्व>
#include & lt; iostream & gt; # शामिल करें & lt; स्ट्रस्ट्रीम & gt; #include & lt; vector & gt; Int main () {std :: vector & lt; float & gt; V = {1.1, -3.4, 1 / 7.0}; Std :: ostrstream ss; के लिए (अहस्ताक्षरित int i = 0; i & lt; v.size (); ++ i) एसएस & lt; & lt; V [i] & lt; & lt; ''; एसएस & lt; & lt; std :: समाप्त होता है; Const char * बफर = ss.str (); // सीधी पहुँच! Std :: cout & lt; & lt; बफ़र & lt; & lt; '\ N'; ss.freeze (गलत); // घृणित}
#include & lt; iostream & gt; #include & lt; स्ट्रिंग & gt; #include & lt; vector & gt; #include & lt; boost / spirit / include / karma.hpp & gt; नामस्थान कर्म = बढ़ावा :: आत्मा :: कर्म; Int main () {std :: vector & lt; float & gt; V = {1.1, -3.4, 1 / 7.0}; Std :: स्ट्रिंग एस; कर्म :: उत्पन्न (बैक_इंसेटर (ओं), कर्म :: डबल_% '', वी); Std :: cout & lt; & lt; S & lt; & lt; '\ N'; // यहां आपकी स्ट्रिंग है}
Comments
Post a Comment