Как я могу получить «адрес» каждого N-го элемента вектора - PullRequest
0 голосов
/ 28 февраля 2019

Как я могу получить «адрес» каждого N-го элемента вектора без использования «сырого цикла».std :: copy_if кажется решением, но я не могу получить адрес элемента, я просто могу получить значение.

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете использовать пропускающий итератор (также называемый пошаговым итератором) с std::for_each (или аналогичным алгоритмом).Однако в стандартной библиотеке нет общих итераторов пропуска.

Если вы хотите самостоятельно реализовать итератор пропуска, идея проста: напишите шаблон, который принимает итератор в качестве аргумента.Этот шаблон является итератором "адаптера".Передайте большую часть шаблона итератора адаптированному итератору, но реализуйте пользовательский оператор приращения, который пропускает элементы на основе ваших критериев.

Хотя адаптеры итератора можно использовать повторно, а существующие реализации доступны, простой цикл может быть оченьменьше работы:

for(size_t i = 0; i < v.size(); i += N)
...