Архитектурная акустика/Реализация/IteratorAdapterForStep

Материал из CAMaaS preliminary wiki
< Архитектурная акустика‎ | Реализация
Версия от 07:30, 8 января 2018; Андрей Чусов (обсуждение | вклад) (Новая страница: «{{class|Архитектурная акустика/Реализация/IteratorAdapterForStep}} {{example_begin}} <source lang="cpp"> using namespace Chusov::Ma…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Итератор-адаптер, преобразующий интерфейс итератора с произвольным доступом так, чтобы переход на одну позицию соответствовал переходу адаптируемого итератора на заданное шагом число позиций.

template <class _BaseRandomIterator>
class IteratorAdapterForStep;
_BaseRandomIteratorТип преобразуемого адаптером итератора. Должен удовлетворять требованиям RandomAccessIterator.
Открытые типы
ТипОписание
iteratorТип _BaseRandomIterator.
iterator_categoryКатегория итератора. Тип эквивалентен std::random_access_iterator_tag.
value_typeТип typename std::iterator_traits<iterator>::value_type.
referenceТип typename std::iterator_traits<iterator>::reference.
pointerТип typename std::iterator_traits<iterator>::pointer.
difference_typeТип typename std::iterator_traits<iterator>::difference_type.
Открытые методы
МетодОписание
(конструкторы)Конструкторы класса IteratorAdapterForStep.
operator=Операторы присваивания.
operator*Оператор разыменовывания.
operator->Оператор косвенного доступа к элементам.
operator++Сдвиг позиции итератора на единицу от начала.
operator--Сдвиг позиции итератора на единицу к началу.
operator+=Изменение позиции итератора на заданное число элементов к концу.
operator-=Изменение позиции итератора на заданное число элементов к началу.
operator+Возвращает итератор, сдвинутый к концу относительно текущего на заданное число позиций.
operator-Возвращает итератор, сдвинутый к началу относительно текущего на заданное число позиций, либо расстояние между двумя итераторами.
operator==Проверка на эквивалентность итераторов.
operator!=Проверка на неэквивалентность итераторов.
operator<Проверка на то, чтобы текущий итератор находился ближе к первому элементу множества, на котором он определен, по сравнению с итератором, который указан параметром.
operator<=Проверка на то, чтобы текущий итератор находился ближе к первому элементу множества, на котором он определен, по сравнению с итератором, который указан параметром, либо совпадал с ним.
operator>Проверка на то, чтобы текущий итератор находился дальше от первого элемента множества, на котором он определен, по сравнению с итератором, который указан параметром.
operator>=Проверка на то, чтобы текущий итератор находился дальше от первого элемента множества, на котором он определен, по сравнению с итератором, который указан параметром, либо совпадал с ним.
baseВозвращает адаптируемый итератор в текущей позиции.
adaptation_baseВозвращает текущий корневой адаптированный, возможно цепочкой адаптеров, итератор.
Функции, не являющиеся частью определения класса
ФункцияОписание
operator+Создает копию указанного итератора IteratorAdapter2D, сдвинутую относительно него на заданное число позиций.
Пример
using namespace Chusov::Math;
Matrix<double> m = 
{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};
std::vector<std::thread> vecThreads;
for (unsigned i = 0; i < std::thread::hardware_concurrency(); ++i)
    vecThreads.emplace_back([&vecThreads, i, &m]() 
    {
        for (auto it = make_iterator_adapter<IteratorAdapterForStep>(i, std::thread::hardware_concurrency(), adapt_iterator_range<IteratorAdapter2D>(m.begin(), m.end()));
            it.adaptation_base() != m.end(); ++it)
            *it *= 2;
    });
for (auto&& thr:vecThreads)
    thr.join();
std::cout << "\nSequentialized matrix elements multiplied by two: ";
for (auto&& elem:adapt_iterator_range<IteratorAdapter2D>(m.begin(), m.end()))
    std::cout << elem << " ";
vecThreads.clear();