В основе C++ 11 для циклов лежит разделение на итератор. Означает ли это, что нет смысла использовать его с boost::adaptor::indexed
? Пример:Диапазон для цикла с boost :: adapter :: indexed
boost::counting_range numbers(10,20);
for(auto i : numbers | indexed(0)) {
cout << "number = " i
/* << " | index = " << i.index() */ // i is an integer!
<< "\n";
}
Я всегда могу использовать счетчик, но мне нравятся индексированные итераторы.
- Возможно ли использовать их как-то с диапазоном для петель?
- Что такое идиома для использования циклов на основе диапазона с индексом? (просто счетчик?)
'indexed' сосет, потому что это добавляет' индекс() 'методы к * * итератору, а не значение, возвращаемое из разыменования итератора. :/ – Xeo
@Xeo Действительно. Время от времени мне нужен индекс элемента в диапазоне. Сначала я плохо себя чувствую. Затем я вводил счетчик. Если к контейнеру можно легко получить доступ с простой старой петлей, я снова чувствую себя плохо и переписываю петлю на основе диапазона в простой старый цикл. – gnzlbg
, так как Xeo упомянутый boost indexed не подходит для этого. Если вы не возражаете против коммутирующих библиотек, то есть несколько библиотек диапазонов C++ на основе itertools python, таких как: https://github.com/ryanhaining/cppitertools/ – Cechner