Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Класс mask_array: диапазон на основе маски
Промежуточный класс mask_array
позволяет получить доступ к элементам, для которых соответствующие по позиции элементы внутри массива с логическими значениями имеют значение true
. Массив с маской можно создать с помощью операторов сравнения (см. разд. 16.3.8). Объявление класса mask_array
:
template <class _Tp> class mask_array;
В классе mask_array
доступен только конструктор копирования, поэтому создать экземпляр класса с помощью конструктора нельзя. Для создания объекта следует указать массив с логическими значениями внутри квадратных скобок:
mask_array<_Tp> operator[](const valarray<bool> &m);
valarray<_Tp> operator[](const valarray<bool> &m) const;
Для преобразования объекта класса mask_array
в массив нужно передать его конструктору класса valarray
или выполнить присваивание (размеры объектов должны совпадать, иначе результат присваивания не определен). Получим элементы со значениями меньшими или равными 2
:
std::valarray<int> arr = {1, 2, 3};
std::valarray<bool> mask = (arr <= 2);
std::cout << std::boolalpha;
for (bool &el : mask) std::cout << el << ' ';
std::cout << std::endl; // true true false
std::valarray<int> arr2(arr[mask]);
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 1 2
В классе mask_array
перегружены следующие операторы:
void operator=(const _Tp &n) const;
mask_array &operator=(const mask_array &m);
void operator=(const valarray<_Tp> &v) const;
void operator+=(const valarray<_Tp> &v) const;
void operator-=(const valarray<_Tp> &v) const;
void operator*=(const valarray<_Tp> &v) const;
void operator/=(const valarray<_Tp> &v) const;
void operator%=(const valarray<_Tp> &v) const;
void operator&=(const valarray<_Tp> &v) const;
void operator|=(const valarray<_Tp> &v) const;
void operator^=(const valarray<_Tp> &v) const;
void operator<<=(const valarray<_Tp> &v) const;
void operator>>=(const valarray<_Tp> &v) const;
Присвоим нулевое значение всем элементам со значениями меньшими или равными 2
:
std::valarray<int> arr = {1, 2, 3};
arr[arr <= 2] = 0;
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 0 0 3
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов