Архитектурная акустика/Реализация/IteratorAdapterForStep
< Архитектурная акустика | Реализация
Перейти к навигации
Перейти к поиску
Версия от 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();