• Предмет: Информатика
  • Автор: marina789102
  • Вопрос задан 3 месяца назад

С ++ . Как на основе данного кода модифицировать или создать новую шаблонную функцию для поиска второго максимального значения элемента в массиве. Есть код (там шаблон функция для нахождения первого максимального ), а мне нужно для поиска второго максимального, как это сделать?

#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;

}

Ответы

Ответ дал: sashok451
0

Ответ:

смотри в прикреплённых фотографиях, несколько вариантов решения твоей задачи (3)

Объяснение:

в конце добавил код на python для сравнения объема

Приложения:
Вас заинтересует