将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;
时,它将实际插入(与<<
一起)到给定的流中。
这是一个很好的通用(仅头文件)库,您只需要将其包含在代码中,它将允许您轻松打印任何标准容器:http://louisdx.github.com/cxx-prettyprint/
相关文章:
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- VI工作室代码错误无法打开输出文件主.exe
- 在代码块中查找输出文件
- 将未签名的字符写入输出文件
- 为什么我的代码不写入输出文件?
- 完成搜索任务时为空输出文件
- 如何将地图<列表<string>、矢量<string>>输出到输出文件?
- 无法在代码块 IDE 中打开输出文件.exe
- C++:更改 IF 语句中的输出文件
- 编译 gsoap 输出文件 (onvif) 时出现问题
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- while 循环中的流输出文件() 通常生成空文件
- 如何使用 Docker 访问输出文件
- 提升进程间共享内存删除、权限和输出文件
- 查找素数,然后将质数放入输出文件中
- GDB / C++ - 根据循环条件将多个变量记录到输出文件中
- 带有文件结束函数的 while 循环重复输出文件中的最后一个数字两次
- 我的输出文件未显示解决方案
- 输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然
- C++,我正在尝试创建一个有效的.bmp输出文件