2013-04-04 4 views
5
ofstream outputFile ("output.txt"); 

if (outputFile.is_open()) 
{ 
    outputFile << "GLfloat vector[]={" << copy(vector.begin(), vector.end(), ostream_iterator<float>(cout, ", ")); << "}" << endl; 
} 
else cout << "Unable to open output file"; 

मैं प्रत्येक फ्लोट को अल्पविराम से अलग करने के साथ एक फ़ाइल में वेक्टर कैसे आउटपुट करूं? यदि संभव हो तो मैं मुद्रण वर्ग ब्रैकेट प्रिंटिंग से बचना चाहूंगा।आउटपुट फ़ाइल में एक सी ++ वेक्टर लिखना

उत्तर

6
outputFile << "GLfloat vector[]={"; 
copy(vector.begin(), vector.end(), ostream_iterator<float>(outputFile , ", ")); 
                  ^^^^^^^^^^ 
outputFile << "}" << endl; 
+6

यह स्पष्टीकरण प्राप्त करने के लिए बहुत ही शानदार होगा कोड के अलावा, आपने क्या किया है। – dbliss

1

आपने समाधान लिया है और इसे स्ट्रीम सम्मिलन में चिपकाने का प्रयास किया है। ऐसा नहीं है कि यह कैसे काम करता है।

outputFile << "GLfloat vector[]={"; 
copy(vector.begin(), vector.end(), ostream_iterator<float>(outputFile, ", ")); 
outputFile << "}" << endl; 

copy एल्गोरिथ्म बस प्रतियां एक सीमा से दूसरे तत्व: यह एक अलग लाइन होना चाहिए। ostream_iterator एक विशेष इटरेटर है जो *it = item_to_insert; करते समय दिए गए स्ट्रीम में वास्तव में (<< के साथ) डालेंगे।

+0

यह अभी भी कहते हैं copy_n घोषित नहीं किया गया है, सभी निम्नलिखित सहित के बावजूद: '# शामिल # शामिल # शामिल # शामिल # शामिल # शामिल # शामिल ' – user2136754

3

सबसे पहले, आपको अपने चर vector पर कॉल नहीं करना चाहिए। इसे एक ऐसा नाम दें जो मानक पुस्तकालय से कक्षा का नाम नहीं है।

दूसरे, ostream_iterator वेक्टर, जो नहीं हो सकता है कि आप क्या चाहते का अंतिम तत्व के बाद भी एक ',' संलग्न कर देगा (एक विभाजक एक विभाजक होना चाहिए, और एक से वेक्टर का अंतिम मान अलग करने के लिए कुछ भी नहीं है आगे मूल्य)।

सी ++ 11 में, आप एक सरल रेंज आधारित for पाश इस्तेमाल कर सकते हैं:

outputFile << "GLfloat vector[]={"; 
auto first = true; 
for (float f : v) 
{ 
    if (!first) { outputFile << ","; } 
    first = false; 
    outputFile << f; 
} 
outputFile << "}" << endl; 

सी ++ 03 में, यह सिर्फ एक थोड़ा और अधिक वर्बोज़ होने जा रहा है:

outputFile << "GLfloat vector[]={"; 
auto first = true; 
for (vector<float>::iterator i = v.begin(); i != end(); ++i) 
{ 
    if (!first) { outputFile << ","; c++; } 
    first = false; 
    outputFile << *i; 
} 
outputFile << "}" << endl; 
+1

लगता है कि तुम मिल गया लूप मिश्रित करने के लिए। – 0x499602D2

+0

@ 0x499602D2: फिक्स्ड, धन्यवाद;) –

+0

कोई समस्या नहीं। क्या यह ठीक है अगर मैं पूछता हूं: आप हाल ही में सवालों का जवाब क्यों नहीं दे रहे हैं? – 0x499602D2

0

यहां एक अच्छी जेनेरिक (हेडर-केवल) लाइब्रेरी है, जिसे आपको बस अपने कोड में शामिल करने की आवश्यकता है और यह आपको किसी भी मानक कंटेनर को आसानी से प्रिंट करने की अनुमति देगा: http://louisdx.github.com/cxx-prettyprint/

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