2014-01-14 11 views
0

我在下面的代碼中有疑問。有人可以解釋一下嗎?合併函數調用時沒有輸出

using namespace std; 
    #define INT_SIZE 32 
    #define R 4 
    #define C 4 
    #define N 4 

    #include <iostream> 
    #include <stdio.h> 
    #include<stdlib.h> 
    #include<math.h> 
    #include<limits.h> 
    #include<stack> 
    #include<vector> 
    #include<algorithm> 


    struct interval{ 
     int start; 
     int end; 
    }; 

    bool compareInterval(interval i1, interval i2) 
    { 
     return (i1.start < i2.start)? true: false; 
    } 


    int merge(vector<interval>& a, int n) 
    { 
     stack<interval> s; 
     sort(a.begin(), a.end(), compareInterval); 
     s.push(a[0]); 
     int i=1; 
     interval temp; 
     while(i<n) 
     { 
      temp = s.top(); 
      s.pop(); 
      if(temp.end > a[i].start && a[i].end > temp.end) 
      { 
       temp.end = a[i].end; 
       s.push(temp); 
      } 
      else if(temp.end < a[i].start) 
      { 
       s.push(temp); 
       s.push(a[i]); 
      } 
      i++; 
     } 
     while(s.size()) 
     { 
      temp = s.top(); 
      cout << temp.start << " "; 
      cout << temp.end << "\n"; 
      s.pop(); 
     } 
     return 0; 
    } 


    int main() 
    { 
    interval intvls[] = { {6,8}, {1,9}, {2,4}, {4,7} }; 
      vector<interval> intervals(intvls, intvls+4); 

      for(int i=0;i<4;i++) 
       {cout << intervals[i].start; 
} // This output is not coming when merge      function is called 


     cout << merge(intervals, 4); 
    } 

我的疑問是:「當我的評論合併函數調用即

//  cout << merge(intervals, 4); 

當我評論這行的話,我能看到的cout<<intervals[i].start. 輸出,否則,我無法看到輸出

回答

0

你不會以換行符結束輸出。嘗試:

{cout << intervals[i].start << "\n";} 

沒有換行,此輸出可能越來越隱蔽之間通過merge()產生的所有輸出。

0

此代碼很少出現問題。

s.push(a[0]); <-- Only on element is in you stack. 
//s.push(a[1]).. you will have to add all other elements like this. 

while(i<n) 
{ 
    temp = s.top(); <-- for second i s will be empty. Here you must check if stack is empty before getting top element. 
    s.pop(); 
} 

您的第一個輸出打印不正確。使用std::endl

cout << intervals[i].start << endl; 
0

有一個在merge導致分段錯誤的錯誤。由於此std::cout不刷新。如果您通過合併調用註釋掉該行,則在程序退出時會刷新std::cout

相關問題