
Как заменить все максимальные элементы на минимальные в вектор (использовать только алгоритмы
стандартной библиотеки шаблонов): На С++.

Ответы на вопрос

Первым делом нужно выяснить общность вопроса.
Нам нужно заменить максимальные элементы (максимальные элементы - это одинаковые элементы с максимальным значением в векторе) минимальным.
Как наиболее проще это сделать?
Для начала нам нужно найти минимальный и максимальный элементы. Сразу отбрасываем варианты со всякими поисками минимумов / максимумов и вспоминаем о сортировке. Для удобства - по возрастанию, так как нам не нужно проходить весь вектор до конца. После сортировки максимальные элементы будут вначале.
Итак, мы отсортировали вектор, максимальные элементы вначале, а минимальный - в конце. Описываем цикл:
- for (int i = 0, temp = arr[i]; i < arr.size(); ++i)
Здесь стоит пояснить: i - итератор, это понятно, temp же - целочисленная переменная, с начала цикла хранящая элемент вектора под индексом 0: arr[0], то есть максимальный элемент.
Внутри цикла мы проверяем, является ли i-й элемент максимальным, то есть, по сути, проходим все максимальные элементы с самого начала:
- if (arr[i] == temp)
- {
- arr[i] = arr[arr.size() - 1];
- }
Здесь arr[arr.size() - 1] - всегда минимальный элемент.
Рассмотрим на примере
Вектор после ввода 7 элементов: -1, 0, 8, -1, 8, 6, 4.
После сортировки: 8, 8, 6, 4, 0, -1, -1
Начало цикла:
i = 0: temp = arr[i] = arr[0] = 8
arr[0] == temp? ⇒ 8 == 8? true ⇒ arr[0] = arr[7 - 1] = -1
i = 1: temp = 8
arr[1] == temp? ⇒ 8 == 8? true ⇒ arr[1] = arr[7 - 1] = -1
i = 2: temp = 8
arr[2] == temp? ⇒ 6 == 8? false ⇒ выход из цикла
Вектор в конце: -1 -1 6 4 0 -1 -1
Код на языке C++
- #include <iostream>
- #include <vector>
- #include <algorithm>
- int main()
- {
- int arrLength = 0;
- std::vector<int> arr;
- std::cout << "Input array length: ";
- do
- {
- std::cin >> arrLength;
- if (arrLength <= 0)
- {
- std::cout << "Error: vector size must be natural!" << std::endl;
- }
- } while (arrLength <= 0);
- for (int i = 0, inputValue = 0; i < arrLength; ++i)
- {
- std::cout << "Input element: ";
- std::cin >> inputValue;
- arr.push_back(inputValue);
- }
- std::sort(arr.rbegin(), arr.rend());
- std::cout << "Array before: ";
- for (int i = 0; i < arr.size(); ++i)
- {
- std::cout << arr[i] << " ";
- }
- for (int i = 0, temp = arr[i]; i < arr.size(); ++i)
- {
- if (arr[i] == temp)
- {
- arr[i] = arr[arr.size() - 1];
- }
- else break;
- }
- std::cout << "\nArray after: ";
- for (int i = 0; i < arr.size(); ++i)
- {
- std::cout << arr[i] << " ";
- }
- return 0;
- }



Чтобы заменить все максимальные элементы в векторе на минимальные, вы можете использовать стандартные алгоритмы из библиотеки шаблонов С++.
Вот как это можно сделать:
cpp#include <algorithm>
#include <vector>
template<typename T>
void replaceMaxWithMin(std::vector<T>& vec) {
if (vec.empty()) {
return;
}
// Находим минимальный и максимальный элементы в векторе
auto minElem = *std::min_element(vec.begin(), vec.end());
auto maxElem = *std::max_element(vec.begin(), vec.end());
// Заменяем все максимальные элементы на минимальные
std::replace(vec.begin(), vec.end(), maxElem, minElem);
}
int main() {
std::vector<int> vec = {1, 5, 7, 2, 7, 3, 7, 9};
replaceMaxWithMin(vec);
// Выводим результат
for (const auto& element : vec) {
std::cout << element << " ";
}
return 0;
}
В этом коде мы определяем функцию replaceMaxWithMin
, которая принимает ссылку на вектор и заменяет все максимальные элементы на минимальные элементы в нем. Для нахождения минимального и максимального элементов воспользуемся функциями std::min_element
и std::max_element
. Затем, используем std::replace
для замены всех максимальных элементов на минимальные. После этого просто вызываем функцию replaceMaxWithMin
на своем векторе.
Заметьте, что код будет работать с любым типом элементов в векторе, поддерживающим операторы сравнения (например, числами). Если у вас вектор из пользовательского класса, убедитесь, что вы правильно перегрузили операторы сравнения для этого класса.


Похожие вопросы
Топ вопросов за вчера в категории Информатика








Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili