增加两行会大大增加执行时间和文件大小 - 任何想法会发生什么?

时间:2016-02-27 15:09:31

标签: c++ file-io g++

我的第一个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';
         }

      }   
   }

这段代码在大约39-40秒内执行,并产生大约240 kb的文件。我在2015 Macbook Retina的VM(parallels)上运行的Ubuntu上编译了这段代码。我正在使用g ++。

事实证明,并非学生数据文件的每一行都对应于课程列表文件中的课程。如果发生这种情况,我们无论如何都要输出该行,并提供3.0的库存课程时间和RNL的特殊代码。以下是修改后的代码:

   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';
         }
      }   
   }

此代码需要永远。因为我已经等了7分钟而且还在唠叨。我最终终止执行,因为输出的文件通常是400mbs并且正在增长,所以显然我有某种无限循环或其他一些奇怪的东西。我尝试过这种情况的变化:

else (!(coursenumHC == coursenumSD) && (subject == subjectHC))

但是我得到了类似的错误。知道为什么执行时间和文件大小会有这么大的差异吗?

注意:我是stackoverflow的新手,我仍然在学习如何避免冗长乏味,但也要有描述性和彻底性。如果这个问题不明确或不充分,请不要犹豫,向我提出有关如何改进的建议。

编辑1:我还是CS的新手,所以当我真的想说我的可执行文件运行所花费的时间增加时,我错误地使用了编译时间。基本上,当我运行可执行文件时,上面的第二个代码块需要更长的时间(实际上是无限期的)。

0 个答案:

没有答案