2016-04-19 3 views
1

Я пытаюсь прочитать список целых чисел из файла и сохранить их в контейнере std::set, после чего хочу вывести целые числа в консоль и затем сгенерировать выходной файл. Я пытался это сделать, но не смог добиться успеха. Если я использую .erase() в моей программе, тогда я могу видеть вывод на консоли и пустой файл без текста. Если я не использую .erase(), то у меня есть ошибка времени выполнения бесконечного цикла. `Не удается сгенерировать вывод std :: set в файл и консоль

#include <iostream> 
#include <set> 
#include <fstream> 
#include <iterator> 
using namespace std; 

int main() 
{ 

    set<int> myset; 

    fstream textfile; 
    textfile.open("input.txt"); // opening the file 

    // reading input from file 
    while (!textfile.eof()) 
    { 
     int iTmp = 0; 
     textfile >> iTmp; 
     myset.insert(iTmp); 


    } 

    // output to the console 
    set<int>::iterator iter = myset.begin(); 
    while (!myset.empty()) 
    { 
     cout << *myset.begin() << " "; 
     myset.erase(myset.begin()); 
    } 

    // writting output to the file 

    ofstream out_data("Ahmad.txt"); 

    while (!myset.empty()) 
    { 
     out_data << *myset.begin() << " "; 
    } 



    system("pause"); 
}` 
+0

Unrelated к вашей проблеме, но вы можете прочитать [ "Почему iostream :: eof внутри условия цикла считается неправильным? "] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong). –

ответ

1

Вы не используете iterator правильно.

set<int>::iterator iter = myset.begin(); 
ofstream out_data("Ahmad.txt"); 

for(; iter != myset.end(); iter++) 
{ 
    cout << *iter << " "; 
    out_data << *iter << " "; 
} 
0

вы стирая их в цикле, где вы показываете им

// output to the console 
for (auto& x : myset) 
    cout << x << " "; 

// writting output to the file 
ofstream out_data("Ahmad.txt"); 
for (auto& x : myset) 
    out_data << x << " "; 
+0

Возможно, он не использует C++ 11 – Nadir

2
#include <iostream> 
#include <iterator> 
#include <set> 
using namespace std; 

int main() { 
    using data_type = int; 
    set<data_type> data_set; 

    //change cin to your ifstream 
    copy(istream_iterator<data_type>(cin), 
     istream_iterator<data_type>(), 
     inserter(data_set, end(data_set))); 

    //change cout to your ofstream 
    copy(begin(data_set), end(data_set), ostream_iterator<data_type>(cout, " ")); 

    return 0; 
} 

пример: http://ideone.com/1Cil1C

+0

всегда приятно видеть использование учебников для алгоритмов std –

Смежные вопросы