簡體   English   中英

將C ++向量寫入輸出文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM