2016-11-18 24 views
0

我正在編寫有關「簡單」練習的編碼問題,該練習是關於對n個整數的向量中的內容進行排序的。問題是編譯器不接受void作爲函數sort的類型(並且它必須是void函數)。但我不明白爲什麼。對於類型匹配的變量(例如,指針< - > v.begin()),但對於它沒有的功能。任何幫助感謝!這裏是我的代碼:有關向量參數的void函數的錯誤

#include <iostream> 
#include <vector> 

typedef std::vector<int>::iterator Vit; 


void sort(Vit begin, Vit end){ 
    int len = end - begin; 
    for(begin; begin < end; ++begin){ 
     for(int i = 1; i < len; ++i){ 
      if(*begin < *(begin +i)){ 
       *begin = *(begin + i); 
      } 
     } 
    } 
    std::cout<< "* "; 
    for(begin; begin < end; ++begin){ 
     std::cout<< *begin<< " "; 
    } 
    std::cout<< "*"; 
    return; 
} 



int main(){ 
    int n; 
    std::cin >> n; 
    std::vector<int> v(n); 
    for(Vit it = v.begin();it != v.end(); ++it){ 
     std::cin >> *it; 
    } 

    void sort (v.begin() , v.end()); 

} 
+4

在主,改變'無效的sort(v.begin(),v.end());''來排序(v.begin(),v.end ());'。 –

+0

正確!非常感謝這是一個非常愚蠢的錯誤... 你能解釋一下爲什麼代碼不起作用嗎?它應該對矢量內的元素進行排序。 –

+0

這聽起來像你可能需要學習如何使用調試器來遍歷你的代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

回答

0

有幾個錯誤。 您正在爲循環的第一個循環開始遞增,但不會重置它。所以第二個for循環將永遠不會被輸入。每個++開始改變你的迭代器的位置! (int i = 1; i < len; ++ i)的循環將轉到begin和i的當前位置,從而離開內存。 以下應該做你想要什麼:

#include <iostream> 
#include <vector> 

typedef std::vector<int>::iterator Vit; 

void sort(Vit begin, Vit end){ 
    for(Vit pos1=begin; pos1 < end; ++pos1) { 
    for(Vit pos2=pos1+1; pos2 < end; ++pos2) { 
     if(*pos1 < *pos2) { 
    int swap = *pos1; 
    *pos1 = *pos2; 
    *pos2 = swap; 
     } 
    } 
    } 
    std::cout<< "* "; 
    for(Vit it=begin; it < end; ++it){ 
    std::cout<< *it<< " "; 
    } 
    std::cout<< "*"; 
    return; 
} 

int main(){ 
    int n; 
    std::cin >> n; 
    std::vector<int> v(n); 
    for(Vit it = v.begin(); it < v.end(); ++it){ 
    std::cin >> *it; 
    } 

    sort (v.begin() , v.end()); 
} 
+0

非常感謝!這部分代碼交換是非常有用的。它沒有完成execrcise的請求,但我設法瞭解了什麼是缺少的,我已經更正了代碼,非常感謝! –