C++ C++;意外的上吊时间

C++ C++;意外的上吊时间,c++,for-loop,set,cout,C++,For Loop,Set,Cout,我试图在我的程序中编写一个函数,加载一个包含216555个单词的巨大文本文件,并将它们作为字符串放入一个集合中。这可以正常工作,但正如预期的那样,它将在文件中循环时挂起几微秒。但是我的循环有点怪,而且运行不正常。请花点时间阅读,我相信这是有道理的,但我不知道要搜索什么 顺便说一下,代码如下: ifstream dictionary; dictionary.open("Dictionary.txt"); if(dictionary.fail()) { cout<<"Could

我试图在我的程序中编写一个函数,加载一个包含216555个单词的巨大文本文件,并将它们作为字符串放入一个集合中。这可以正常工作,但正如预期的那样,它将在文件中循环时挂起几微秒。但是我的循环有点怪,而且运行不正常。请花点时间阅读,我相信这是有道理的,但我不知道要搜索什么

顺便说一下,代码如下:

ifstream dictionary;
dictionary.open("Dictionary.txt");

if(dictionary.fail())
{
    cout<<"Could not find Dictionary.txt. Exiting."<<endl;
    exit(0);
}
int i = 0;
int progress = 216555/50;
cout<<"Loading dictionary..."<<endl;
cout<<"<                                                  >"<<endl;
cout<<"<";
for(string line; getline(dictionary, line);)
{
    usleep(1); //Explanation below (not the hangtime)
    i++;
    if(i%progress == 0)
        cout<<"=";
    words.insert(line);
}
ifstream字典;
dictionary.open(“dictionary.txt”);
if(dictionary.fail())
{

cout您从不刷新流,因此输出只是进入缓冲区


更改
cout您需要刷新输出流

cout << "=" << std::flush;
cout程序正在“堆叠cout调用”。它被称为输出缓冲,每个主要的操作系统都这样做

当处于交互模式时(正如您的程序打算使用的那样),输出按行进行缓冲;也就是说,当看到换行符时,输出将被强制到终端。您还可以使用块缓冲(强制输出之间的固定字节数;管道输出时使用)和非缓冲

C++提供了
std::flush
stream修饰符,可以在任意点强制输出。它可以这样使用:

Loading dictionary...
<                                                  >
<=========================                         
cout << "=" << std::flush;

非常感谢!您是否也知道是否可以在已打印的内容之前打印出内容?我希望输出为一行,即
,在运行时用户可以看到进度条的结尾,但除非每次都打印出整行内容,否则这是不可能的。您得到了什么我的意思是,也许知道我应该搜索什么?顺便说一句,我找到了它。我只是在字符串后面放了“\r”,它会覆盖。(不在Xcode中)是的,回车(
\r
)会将光标重置到行的开头,允许您覆盖行。(请记住,它不会自动覆盖行。)