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

Jak wypisać wektor do pliku, przy czym każdy float jest oddzielony przecinkami? Chciałbym również, jeśli to możliwe, uniknąć drukowania nawiasów kwadratowych.Zapisywanie wektora C++ do pliku wyjściowego

Odpowiedz

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

Byłoby wspaniale uzyskać wyjaśnienie co zrobiłeś, oprócz kodu. – dbliss

1

Podjęto próbę rozwiązania problemu i wstawienia go do strumienia. Tak nie działa. Powinno być oddzielna linia:

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

W copy algorytm prostu kopiuje elementy z jednego zakresu na inny. ostream_iterator to specjalny iterator, który wstawi (z <<) do danego strumienia, gdy wykonasz *it = item_to_insert;.

+0

wciąż mówi copy_n nie jest zadeklarowana, choć w tym wszystkim: '#include #include #include #include #include #include #include ' – user2136754

3

Po pierwsze, nie powinieneś wywoływać swojej zmiennej vector. Nadaj mu nazwę, która nie jest nazwą klasy z Biblioteki standardowej.

drugie, ostream_iterator dołączy do ',' nawet po ostatnim elemencie wektora, który nie może być to, co chcesz (separator powinien być separator, i nie ma nic do oddzielenia ostatnią wartość wektora od A dalsza wartość).

w C++ 11, można użyć prostego zakres oparte for pętlę:

outputFile << "GLfloat vector[]={"; 
auto first = true; 
for (float f : v) 
{ 
    if (!first) { outputFile << ","; } 
    first = false; 
    outputFile << f; 
} 
outputFile << "}" << endl; 

w C++ 03, to będzie po prostu nieco bardziej gadatliwy:

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

że masz że do pętli się pomieszało. – 0x499602D2

+0

@ 0x499602D2: Naprawiono, dziękuję;) –

+0

Bez problemu. Czy to w porządku, jeśli zapytam: dlaczego ostatnio nie odpowiadałeś na pytania? – 0x499602D2