Моя программа запускается для запроса ввода пользователем указанного целого числа с последующим хранением большего числа целых чисел в динамическом массиве. На выходе выдается гистограмма, использующая звезды, чтобы показать, сколько из каждого целого.Функция гистограммы с использованием динамических массивов C++ 11
У меня есть все задачи, за исключением одного. Я пробовал реализовать функцию swap в течение нескольких часов, но не смог найти решение моей проблемы.
Моя проблема заключается в том, что я хочу получить свой результат в порядке от наименьшего до наибольшего. Например,
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;
}
см. [Std :: swap] (http://en.cppreference.com/w/cpp/algorithm/swap). Вы используете «namespace std;», поэтому добавляете в 'std :: swap' перегрузку. Вы пробовали вызывать свою функцию свопинга из более простой функции, чтобы убедиться, что это на самом деле дает вам проблемы? Также прекратите делать это: 'int x; x = 1; 'и просто' int x = 1; ' –