2016-08-16 2 views
0

私のプログラムは、指定された整数のユーザー入力を求めてから、より多くの整数を動的配列に格納するように実行されます。ヒストグラムを出力すると、星を使って各整数の数を表示します。ダイナミック配列を使用したヒストグラム関数C++ 11

私は1つを除いてすべてのタスクを完了しました。私は何時間もスワップ機能を実装しようとしましたが、私の問題の解決策を見つけられませんでした。

私の問題は、出力を最小から最大まで順番に取得したいということです。例えば 、

Enter number of grades: 5 Enter grades (each on a new line): 20 4 10 10 20 Histogram: 20 ** 4 * 10 **

は、しかし、私はここでは代わりに

Histogram: 4 * 10 ** 20 **

次の出力をしたいが、私のコードです:

#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <iomanip> 

using namespace std; 

void hist(int arr[], int n); 

void swap(int &a, int &b); 

int main(){ 
    int* arr = NULL; 
    int number; 
    cout << "Enter number of grades:" << endl; 
    cin >> number; 

    cout << "Enter grades (each on a new line):" << endl; 
    arr = new int[number]; 
    for(int i = 0; i < number; i++){ 
    cin >> arr[i]; 
    } 
    hist(arr, number); 
    return 0; 
    delete [] arr; 
} 

void hist(int arr[], int n){ 
    cout << "Histogram:" << endl; 
    for (int i = 0; i < n; i++){ 
    int j; 
    for (j = 0; j < i; j++) 
     if(arr[i] == arr[j]) 
     break; 
    if (i == j){ 
     int xx = count(arr, arr+n, arr[i]); 
     cout << setw(3) << arr[i] << " "; 
     for (int j = 0; j < xx; ++j){ 
     cout << "*"; 
     } 
     cout << endl; 
    } 
    } 
} 

void swap(int &a, int &b){ 
    int temp; 
    temp = a; 
    a = b; 
    b = temp; 
} 
+1

[std :: swap](http://en.cppreference.com/w/cpp/algorithm/swap)を参照してください。あなたは 'namespace std;を使用していますので、' std :: swap'sオーバーロードセットに追加します。スワップ関数を簡単な関数から呼び出すことで実際に問題が発生しているかどうかを確認しようとしましたか?またこれをやめてください: 'int x; x = 1; 'int x = 1;とするだけです。 –

答えて

0

何をしたいのベクトルを並べ替えることです要素を数える前に

void hist(int arr[], int n){ 
    sort(arr, arr+n); 
    ... 
} 

あなたのソリューションを変更することをお勧めします。 std::mapを使用していた場合は、問題の解決策が予約済みの形ですぐにあります。 また、std::vectorを使用してみませんか?

関連する問題