Как получить текущую позицию в std алгоритме

231
15 мая 2017, 00:58

Нужно изнутри std алгоритма получить текущий индекс в коллекции или итератор текущего элемента, то можно как-нибудь сделать?
Например, в std::generate_n нужно знать какой элемент сейчас генерируется

Answer 1

Скажите, как при умножении двух чисел

n = a * b;

знать, какие разряды сейчас умножаются?

Я к тому, что у вас есть строка до выполнения действия и строка после. Что вы хотите узнать? "Сейчас" - выполняется то или иное действие.

Вы можете влезть в тот же generate_n и добавить свой код, который будет получать эту текущую позицию (как - второй вопрос). Но пока это библиотечная функция, в код которой вы не лезете - что означает текущий индекс? В какой именно момент? С точки зрения вашего кода это - атомарное действие.

Answer 2

Если используемый алгоритм гарантирует однократность вызова функционального объекта (и отсутствие копирований оного), переданного в него, то можно получить номер итерации в коде этого функционального объекта. На примере упомянутого generate_n:

#include <algorithm>
#include <iostream>
int main() 
{
    const int n = 10;
    int arr[n];
    std::generate_n(arr, n, 
        []() 
        { 
            static int i = 0; std::cout << i++ << "\n"; return i; 
        });
}
READ ALSO
QListWidget выбор элемента

QListWidget выбор элемента

Как проверить, был ли выбран элемент в QListWidget?

301
Javascript. Элемент с обработчиками событий

Javascript. Элемент с обработчиками событий

Доброго времени суток, Возник вопрос по поводу javascript: У меня есть конструкция

306
Javascript перебрать json

Javascript перебрать json

Имею JSON такого вида:

317
Как работает forEach в javascript

Как работает forEach в javascript

Помогите понять как работает forEach в jsБылоб хорошо наглядный пример

718