2016-11-18 8 views
0

n個の整数のベクトルの内部にあるものをソートすることについて「簡単な」演習についてコーディングの問題があります。問題は、コンパイラがfunction sortの型としてvoidを受け入れないことです(そして、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

を、 '無効ソート(v.begin()、v.end())に変更;' 'ソート(v.begin()、v.endへ()); '。 –

+0

正解!ありがとう、それは本当に愚かなエラーです... なぜコードが動作しないのか私に説明できますか?ベクトルの内部の要素をソートする必要があります。 –

+0

デバッガを使ってコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

答えて

0

いくつかのエラーがあります。 最初のforループでインクリメントが開始されますが、リセットされることはありません。したがって、2番目の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の要求を満たしていませんでしたが、何が欠けていたかを理解することができ、コードを修正しました。本当にありがとうございます! –

関連する問題