将c++向量写入输出文件

Writing a C++ vector to an output file

本文关键字:输出 文件 c++ 向量      更新时间:2023-10-16
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;时,它将实际插入(与<<一起)到给定的流中。

这是一个很好的通用(仅头文件)库,您只需要将其包含在代码中,它将允许您轻松打印任何标准容器:http://louisdx.github.com/cxx-prettyprint/