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";

如何将向量输出到文件,每个浮点数用逗号分隔?如果可能的话,我还想避免打印方括号。

4

4 回答 4

6
outputFile << "GLfloat vector[]={";
copy(vector.begin(), vector.end(), ostream_iterator<float>(outputFile , ", ")); 
                                                           ^^^^^^^^^^
outputFile << "}" << endl;
于 2013-04-04T16:47:12.843 回答
3

首先,您不应该调用您的变量vector。给它一个不是标准库中类的名称的名称。

其次,ostream_iterator将在向量的最后一个元素之后附加 a ',',这可能不是您想要的(分隔符应该是一个separator,并且没有什么可以将向量的最后一个值与另一个值分开)。

在 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;
于 2013-04-04T16:55:51.043 回答
2

您已经采用了解决方案并尝试将其粘贴到流插入中。这不是它的工作原理。它应该是一个单独的行:

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

copy算法只是将元素从一个范围复制到另一个范围。ostream_iterator是一个特殊的迭代器,<<当你做*it = item_to_insert;.

于 2013-04-04T16:47:49.437 回答
0

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

于 2013-04-04T18:11:33.787 回答