Замена значений элементов

Для замены значений элементов предназначены следующие функции:

  • replace() — заменяет все вхождения значения old_value внутри диапазона между first и last новым значением new_value. Сравнение производится с помощью оператора ==. Формат функции:
#include <algorithm>
void replace(first, last, const _Tp &old_value,
             const _Tp &new_value);

Пример:

std::vector<int> arr = {1, 2, 2, 4, 5, 2};
std::replace(arr.begin(), arr.end(), 2, 0);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 0 0 4 5 0
  • replace_copy() — аналогична функции replace(), но результат вставляет в диапазон с начальной позицией result и возвращает итератор. Формат функции:
#include <algorithm>
iterator replace_copy(first, last, result,
                 const _Tp &old_value, const _Tp &new_value);

Пример:

std::vector<int> arr = {1, 2, 2, 4, 5, 2}, arr2(6, 0);
std::replace_copy(arr.begin(), arr.end(), arr2.begin(), 2, 0);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 2 2 4 5 2
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 1 0 0 4 5 0
  • replace_if() — присваивает значение new_value всем элементам внутри диапазона между first и last, для которых пользовательская функция pred вернула значение true. Формат функции:
#include <algorithm>
void replace_if(first, last, pred, const _Tp &new_value);

Пример:

std::vector<int> arr = {1, 2, 2, 4, 5, 2};
std::replace_if(arr.begin(), arr.end(),
                [](const int &x){ return x == 2; }, 0);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 0 0 4 5 0
  • replace_copy_if() — аналогична функции replace_if(), но результат вставляет в диапазон с начальной позицией result и возвращает итератор. Формат функции:
#include <algorithm>
iterator replace_copy_if(first, last, result,
                         pred, const _Tp &new_value);

Пример:

std::vector<int> arr = {1, 2, 2, 4, 5, 2}, arr2(6, 0);
std::replace_copy_if(arr.begin(), arr.end(), arr2.begin(),
                     [](const int &x){ return x == 2; }, 0);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 2 2 4 5 2
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 1 0 0 4 5 0
  • fill() — присваивает значение val всем элементам внутри диапазона между first и last. Формат функции:
#include <algorithm>
void fill(first, last, const _Tp &val);

Пример:

std::vector<int> arr = {1, 2, 3};
std::fill(arr.begin(), arr.end(), 0);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 0 0 0
  • generate() — присваивает значение, возвращаемое пользовательской функцией gen, всем элементам внутри диапазона между first и last. Формат функции:
#include <algorithm>
void generate(first, last, gen);

Заполним диапазон случайными числами от 0 до 9 включительно:

// #include <cstdlib>
// #include <ctime>
std::srand(static_cast<unsigned int>( std::time(nullptr) ));
std::vector<int> arr = {1, 2, 3, 4, 5};
std::generate(arr.begin(), arr.end(),
              [](){ return std::rand() % 10; });
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // Например: 1 8 6 9 3
  • fill_n() — присваивает значение val первым n элементам, начиная с позиции first, и возвращает итератор. Формат функции:
#include <algorithm>
iterator fill_n(first, _Size n, const _Tp &val);

Пример:

std::vector<int> arr = {1, 2, 3};
std::fill_n(arr.begin(), 2, 0);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 0 0 3
  • generate_n() — присваивает значение, возвращаемое пользовательской функцией gen, первым n элементам, начиная с позиции first, и возвращает итератор. Формат функции:
#include <algorithm>
iterator generate_n(first, _Size n, gen);

Пример:

// #include <cstdlib>
// #include <ctime>
std::srand(static_cast<unsigned int>( std::time(nullptr) ));
std::vector<int> arr = {-1, -1, -1, -1, -1};
std::generate_n(arr.begin(), 3,
              [](){ return std::rand() % 10; });
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // Например: 6 3 5 -1 -1

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов