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";
如何将矢量输出到文件,每个浮点数用逗号分隔?如果可能的话,我还想避免打印方括号。
答案 0 :(得分:6)
outputFile << "GLfloat vector[]={";
copy(vector.begin(), vector.end(), ostream_iterator<float>(outputFile , ", "));
^^^^^^^^^^
outputFile << "}" << endl;
答案 1 :(得分: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;
答案 2 :(得分:1)
您已采取解决方案并尝试将其粘贴到流插入中。这不是它的工作原理。它应该是一个单独的行:
outputFile << "GLfloat vector[]={";
copy(vector.begin(), vector.end(), ostream_iterator<float>(outputFile, ", "));
outputFile << "}" << endl;
copy
算法只是将元素从一个范围复制到另一个范围。 ostream_iterator
是一个特殊的迭代器,当您执行<<
时,它将实际插入(*it = item_to_insert;
}到给定的流中。
答案 3 :(得分:0)
这是一个很好的通用(仅限标题)库,您只需要在代码中包含它,它将允许您轻松打印任何标准容器:http://louisdx.github.com/cxx-prettyprint/