Можно ли заменить следующий цикл на какой-то стандартный алгоритм библиотеки?
for (auto iterator = a.begin() + x; iterator != a.end() - y; ++iterator) {
*(iterator + y) = f(*iterator, *(iterator + y));
}
Навскидку
std::transform(a.begin() + x, a.end() - y, a.begin() + x + y, a.begin() + x + y, f);
Однако std::transform, насколько я помню, не гарантирует порядка обработки элементов. Так как такая операция потенциально может модифицировать входной диапазон, непредсказуемый порядок обработки может привести к непредсказуемым результатам. То есть проблема возникает если диапазон [a.begin() + x, a.end() - y) перекрывается с диапазоном [a.begin() + x + y, a.end()).
Сборка персонального компьютера от Artline: умный выбор для современных пользователей