Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 添加两行代码会大大增加执行时间和文件大小—知道什么是';发生什么事了?_C++_File Io_G++ - Fatal编程技术网

C++ 添加两行代码会大大增加执行时间和文件大小—知道什么是';发生什么事了?

C++ 添加两行代码会大大增加执行时间和文件大小—知道什么是';发生什么事了?,c++,file-io,g++,C++,File Io,G++,我的第一个CS项目的任务非常简单:取两个文件,一个包含学生数据,另一个包含学院课程列表,并在第三个文件中匹配这两个文件。当学生文件中的课程编号和科目数据与课程列表中的相同数据匹配时,请将课程时数和课程列表中的特殊代码附加到每一行。所有这些都在第三个文件中输出 当我使用以下工具时,一切都很顺利: while (sdStream >> eiD >> semester >> subject >> coursenumSD >> grade

我的第一个CS项目的任务非常简单:取两个文件,一个包含学生数据,另一个包含学院课程列表,并在第三个文件中匹配这两个文件。当学生文件中的课程编号和科目数据与课程列表中的相同数据匹配时,请将课程时数和课程列表中的特殊代码附加到每一行。所有这些都在第三个文件中输出

当我使用以下工具时,一切都很顺利:

   while (sdStream >> eiD >> semester >> subject >> coursenumSD >> grade >> gradeNum) // while stream from SD file is open, execute below
   {
      hcStream.clear();
      hcStream.seekg(0);
      while (hcStream >> subjectHC >> coursenumHC >> gpaHC >> codeHC) // while stream from HC file is open, execute below 
      {
         if ((coursenumHC == coursenumSD) && (subject == subjectHC)) // while identifying info from file 1 = date from file 2, out put the below
         {
            outputStream << endl << eiD + '\t' << semester + '\t' << subject + '\t' << coursenumSD + '\t' << grade + '\t' << gradeNum + '\t' << gpaHC + '\t' << codeHC + '\t';
         }

      }   
   }
但我也有类似的错误。你知道为什么在执行时间和文件大小上会有如此巨大的差异吗

注意:我是stackoverflow的新手,我仍在学习如何避免冗长和乏味,同时也避免描述性和透彻性。如果这个问题不清楚或不充分,请毫不犹豫地批评我,并建议我如何改进


编辑1:我还是CS新手,所以当我真的想说我的可执行文件运行时间增加时,我错误地使用了编译时间。基本上,当我运行可执行文件时,当上面的第二个代码块被替换为
'\n'
时,它需要更长的时间(实际上是无限期的)speedup@Chris1.输入文件的大小是多少?2.如果采用
if
vs
else
路径,则采用
路径的比率是多少?如果它非常低,那么它当然会比第一个版本写入更多的输出文件,并且使用flushing-
std::endl
。您可能应该分析代码以找出花费时间的地方。如果怀疑存在无限循环,则可以添加一些调试输出行,以便检查执行流是否按照预期执行。处理240k文本的40秒似乎非常慢(40毫秒将更接近我的预期)@LogicStuff文件1(学生数据)为190kb,文件2(课程数据)为273kb。文件1由6k行组成,文件2由13k行组成。我将尝试使用M.M的建议将endl替换为\n-实际上我完全忘记了endl也会刷新。只需几行就可以创建一个小示例输入,并使用调试器逐步完成代码。
   while (sdStream >> eiD >> semester >> subject >> coursenumSD >> grade >> gradeNum) // while stream from SD file is open, execute below
   {
      hcStream.clear();
      hcStream.seekg(0);
      while (hcStream >> subjectHC >> coursenumHC >> gpaHC >> codeHC) // while stream from HC file is open, execute below 
      {
         if ((coursenumHC == coursenumSD) && (subject == subjectHC)) // while identifying info from file 1 = date from file 2, out put the below
         {
            outputStream << endl << eiD + '\t' << semester + '\t' << subject + '\t' << coursenumSD + '\t' << grade + '\t' << gradeNum + '\t' << gpaHC + '\t' << codeHC + '\t';
         }
         else
         {
            outputStream << endl << eiD + '\t' << semester + '\t' << subject + '\t' << coursenumSD + '\t' << grade + '\t' << gradeNum + '\t' << "3.0" + '\t' << "RNL" + '\t';
         }
      }   
   }
else (!(coursenumHC == coursenumSD) && (subject == subjectHC))