Войти
ФлеймФорумПрограммирование

range vs iterator [KRESTOPROBLEMY]

Advanced: Тема повышенной сложности или важная.

#0
12:00, 18 мая 2019

Собственно говоря, можно ли заменить итератор диапазоном?
Интересуют контейнеры типа vector, list, map, unordered_map и всякие алгоритмы из <agorithm>. Можно ли переписать это всё на использование диапазонов, вместо итераторов?

#1
12:03, 18 мая 2019

Panzerschrek[CN]
> можно ли заменить итератор диапазоном?

А разве диапазон это не два итератора внутре? Поэтому непонятно о какой замене идёт речь.

#2
12:17, 18 мая 2019

Panzerschrek[CN]
Посмотри в либе gammaker Intra. Там вроде он делал диапазоны.

#3
13:12, 18 мая 2019

Пересмотрел std::algorithm. Там большинство алгоритмов - линейный перебор диапазона, итераторы не нужны. Варианты с inserter_iterator заменяются функтором.
Остальные алгоритмы - требуют итераторы произвольного доступа, а такое тоже заменяется диапазоном.

Труднее будет с некоторыми случаями со словарями/связными списками.

#4
16:33, 18 мая 2019

https://dlang.org/phobos/std_algorithm.html
https://github.com/opencv/ade/tree/master/sources/ade/include/ade/util

#5
17:30, 18 мая 2019

Faceroll
Посмотрел, как оно в D. Примерно так мне и хочется.

#6
4:18, 19 мая 2019

В С++20 готовятся какие то ренджи: https://en.cppreference.com/w/cpp/ranges
Пример оттуда:

#include <vector>
#include <ranges>
#include <iostream>
 
int main()
{
  std::vector<int> ints{0,1,2,3,4,5};
  auto even = [](int i){ return 0 == i % 2; };
  auto square = [](int i) { return i * i; };
 
  for (int i : ints | std::view::filter(even) | std::view::transform(square)) {
    std::cout << i << ' ';
  }
}
ФлеймФорумПрограммирование