2013-04-04 164 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"; 

如何向文件輸出矢量,每個浮點用逗號分隔?如果可能的話,我也想避免打印方括號。將C++向量寫入輸出文件

回答

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

這將是令人敬畏的除了代碼之外,你做了什麼。 – dbliss 2015-10-13 01:58:27

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未聲明,儘管包括以下所有: '#包括 的#include 的#include 的#include 的#include 的#include 的#include ' – user2136754 2013-04-04 19:04:48

3

首先,你不應該叫你的變量vector。給它一個名稱,它不是標準庫中類的名稱。

其次,即使是向量,你想要什麼這可能不會是最後一個元素後ostream_iterator將追加一個','(分隔應該是一個分離,並沒有什麼分離向量的最後一個值從進一步價值)。

在C++ 11,你可以使用一個簡單的基於範圍的for循環:

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

在C++ 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 2013-11-09 23:01:24

+0

@ 0x499602D2:已修復,謝謝;) – 2013-11-10 17:06:27

+0

沒問題。如果我問:你爲什麼最近沒有回答問題? – 0x499602D2 2013-11-10 17:08:44