C++ 无法成功生成文件和控制台的std::set输出

C++ 无法成功生成文件和控制台的std::set输出,c++,set,C++,Set,我试图从文件中读取一个整数列表,并将它们存储到std::set容器中,然后将整数输出到控制台,然后生成输出文件。我试过做这件事,但没有成功。如果我在程序中使用.erase(),那么我可以在控制台上看到输出和一个没有文本的空文件。如果我不使用.erase(),那么我有无限循环的运行时错误` #include <iostream> #include <set> #include <fstream> #include <iterator> using n

我试图从文件中读取一个整数列表,并将它们存储到
std::set
容器中,然后将整数输出到控制台,然后生成输出文件。我试过做这件事,但没有成功。如果我在程序中使用
.erase()
,那么我可以在控制台上看到输出和一个没有文本的空文件。如果我不使用
.erase()
,那么我有无限循环的运行时错误`

#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");
}`
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
设置myset;
fstream文本文件;
textfile.open(“input.txt”);//打开文件
//从文件读取输入
而(!textfile.eof())
{
int-iTmp=0;
文本文件>>iTmp;
myset.insert(iTmp);
}
//输出到控制台
set::iterator iter=myset.begin();
而(!myset.empty())
{

cout您没有正确使用
迭代器

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

for(; iter != myset.end(); iter++)
{
    cout << *iter << " ";
    out_data << *iter << " ";
}
set::iterator iter=myset.begin();
流式输出数据(“Ahmad.txt”);
对于(;iter!=myset.end();iter++)
{

cout您正在显示它们的循环中擦除它们

// 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 << " ";
//输出到控制台
用于(自动&x:myset)
不能包含
#包括
#包括
使用名称空间std;
int main(){
使用数据类型=int;
设置数据集;
//将cin更改为您的ifstream
复制(istream_迭代器(cin),
istream_迭代器(),
插入器(数据集,结束(数据集));
//将cout更改为您的流
复制(开始(数据集)、结束(数据集)、ostream(迭代器)(cout)(“”);
返回0;
}

示例:

和您的问题无关,但您可能想阅读。他可能不使用c++11。看到教科书上使用std算法总是很高兴的
#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;
}