Предмет: Информатика,
автор: marina789102
С ++ . Как на основе данного кода модифицировать или создать новую шаблонную функцию для поиска второго максимального значения элемента в массиве. Есть код (там шаблон функция для нахождения первого максимального ), а мне нужно для поиска второго максимального, как это сделать?
#include
template
void mySum(T1 a, T2 b, T3& res) {
res = a + b;
}
template
void maxElement(T*& arr, int len, T& maxv) {
if (!arr || !len) {
maxv = 0;
return;
}
maxv = arr[0];
for (int i = 1; i < len; ++i)
if (arr[i] > maxv)
maxv = arr[i];
}
class Set
{
int N;
int* arr;
public:
Set(): N(0), arr(nullptr) {}
Set(int n) {
if (n < 0) throw std::length_error("n must not be negative!");
if (!n) Set();
else {
N = n;
arr = new int[n];
}
}
Set(const Set& other) {
N = other.N;
arr = new int[N];
for(int i = 0; i < N; ++i)
arr[i] = other.arr[i];
}
~Set() { delete[] arr; }
int size() const { return N; }
int*& get_arr() { return arr; }
int min() {
return _search([](int a, int b) -> bool { return a < b; });
}
int max() {
return _search([](int a, int b) -> bool { return a > b; });
}
int& operator[](int index) {
if (index < 0 || index >= N)
throw std::out_of_range("index out of range!");
return arr[index];
}
friend std::ostream& operator<<(std::ostream&, const Set&);
private:
int _search(bool (*condFunc)(int, int)) {
if (!arr) return 0;
int res = arr[0];
for(int i = 1; i < N; ++i)
if (condFunc(arr[i], res))
res = arr[i];
return res;
}
};
std::ostream& operator<<(std::ostream& out, const Set& other) {
out << '{';
if (other.arr) {
out << other.arr[0];
for (int i = 1; i < other.N; i++)
out << ", " << other.arr[i];
}
out << '}';
return out;
}
void setRand(Set& arr) {
srand((unsigned int) time(NULL));
for (int i = 0; i < arr.size(); ++i)
arr[i] = rand() % 100;
}
int main()
{
setlocale(LC_CTYPE, "rus");
int n;
std::cout << "Введите размер массива: ";
std::cin >> n;
Set array1;
setRand(array1);
std::cout << "Массив: " << array1 << '\n';
std::cout << "Max: " << array1.max() << ", Min: " << array1.min() << "\n\n";
Set array2(n);
setRand(array2);
std::cout << "Массив: " << array2 << '\n';
std::cout << "Max: " << array2.max() << ", Min: " << array2.min() << "\n\n";
Set array3(array2);
setRand(array3);
std::cout << "Массив: " << array3 << '\n';
std::cout << "Max: " << array3.max() << ", Min: " << array3.min() << "\n\n";
double sum;
mySum (10, 45.2, sum);
std::cout << "sum: " << sum << '\n';
int maxv;
maxElement (array2.get_arr(), array2.size(), maxv);
std::cout << "maxv: " << maxv << '\n';
return 0;
}
Ответы
Автор ответа:
0
Ответ:
смотри в прикреплённых фотографиях, несколько вариантов решения твоей задачи (3)
Объяснение:
в конце добавил код на python для сравнения объема
Приложения:
Похожие вопросы
Предмет: Математика,
автор: learne853
Предмет: МХК,
автор: evgeniali646
Предмет: Геометрия,
автор: annakordina2009
Предмет: Математика,
автор: gusp2828