2013-04-04 163 views
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"; 

如何向文件输出矢量,每个浮点用逗号分隔?如果可能的话,我也想避免打印方括号。将C++向量写入输出文件

回答

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

这将是令人敬畏的除了代码之外,你做了什么。 – dbliss 2015-10-13 01:58:27

1

你已经采取了解决方案,并试图将其插入流插入。这不是它的工作原理。它应该是一个单独的行:

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

copy算法简单的拷贝从一个范围内的元素到另一个。 ostream_iterator是一个特殊的迭代器,当您执行*it = item_to_insert;时,将实际插入(使用<<)到给定的流中。

+0

还在说copy_n未声明,尽管包括以下所有: '#包括 的#include 的#include 的#include 的#include 的#include 的#include ' – user2136754 2013-04-04 19:04:48

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; 
+1

觉得你有那为循环混合起来。 – 0x499602D2 2013-11-09 23:01:24

+0

@ 0x499602D2:已修复,谢谢;) – 2013-11-10 17:06:27

+0

没问题。如果我问:你为什么最近没有回答问题? – 0x499602D2 2013-11-10 17:08:44