[英]Writing a C++ vector to an output file
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";
如何將矢量輸出到文件,每個浮點數用逗號分隔? 如果可能的話,我還想避免打印方括號。
outputFile << "GLfloat vector[]={";
copy(vector.begin(), vector.end(), ostream_iterator<float>(outputFile , ", "));
^^^^^^^^^^
outputFile << "}" << endl;
首先,你不應該調用你的變量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;
您已采用該解決方案並嘗試將其粘貼到流插入中。 這不是它的工作原理。 它應該是一個單獨的行:
outputFile << "GLfloat vector[]={";
copy(vector.begin(), vector.end(), ostream_iterator<float>(outputFile, ", "));
outputFile << "}" << endl;
copy
算法只是將元素從一個范圍復制到另一個范圍。 ostream_iterator
是一個特殊的迭代器,當你執行*it = item_to_insert;
時,它會實際插入(帶有<<
)到給定的流中*it = item_to_insert;
。
這是一個很好的通用(僅限標題)庫,您只需要在代碼中包含它,它將允許您輕松打印任何標准容器: http : //louisdx.github.com/cxx-prettyprint/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.