Ошибка: nth_element — нет экземпляра перегруженной функции (Median Finder Program)

Я так близок к завершению этой программы. Он найдет медиану массива из 5 значений. У меня есть одна последняя ошибка, которую я не могу уйти. Поскольку я новичок в C ++, я понятия не имею, в чем может быть проблема. Я исследовал ошибку снова и снова здесь и в Google; неудачно.

Вот код:

#include <algorithm>
#include <functional>
#include <array>
#include <iostream>
using namespace std;

int main()
{
int integer1, integer2, integer3, integer4, integer5;

//Input of integers
std::cout << "Enter the first integer: ";
std::cin >> integer1;
std::cout << "Enter the second integer: ";
std::cin >> integer2;
std::cout << "Enter the third integer: ";
std::cin >> integer3;
std::cout << "Enter the fourth integer:";
std::cin >> integer4;
std::cout << "Enter the fifth integer:";
std::cin >> integer5;

std::array <int,5> a = {integer1, integer2, integer3, integer4, integer5};

//Sort array
std::sort(a.begin(), a.end());
for (int a : a) {
std::cout << a << " ";
}

std::nth_element(a.begin(), a.begin()+1, a.size()/2, a.end());
std::cout <<"The median of the integers "<<integer1<<", "<<integer2<<", "<<integer3<<", "<<integer4<<", and "<<integer5<< " is " <<a[a.size()/2]<< '\n';
std::endl (std::cout);return 0;
}

В сообщении об ошибке указано: «IntelliSense: экземпляр перегруженной функции отсутствует». Std :: nth_element соответствует списку аргументов, типы аргументов: (std :: _ Array_iterator, std :: _ Array_iterator, unsigned int, std :: _ Array_iterator)

Помоги мне закончить это дело! Заранее спасибо.

0

Решение

Вы неправильно поняли, что nth_element делает, и пытаются использовать его неправильно.

Эта функция берет диапазон, который не обязательно отсортирован, и частично сортирует его так, что n-й элемент находится на своем правильном месте. Если вы используете эту функцию, чтобы найти медиану, вам не нужно сначала сортировать.

Если у вас уже есть отсортированный диапазон [first, last) тогда n-й элемент этого диапазона указан first + n,

1

Другие решения

Я думаю, что вы имели в виду:

std::nth_element(a.begin(), a.begin()+a.size()/2, a.end());

Пожалуйста, обратитесь к C ++ ссылка.

0

По вопросам рекламы [email protected]