Если ваша задача - выяснить цель этого алгоритма, прочитайте этот ответ.
Давайте сначала рассмотрим ваш пример:
std::vector<double> a{ 4, -6, 0, 8, -7 };
data(a, 2, -7);
Результат: 4, -6, -7, 0, 8, -7
Должно быть ясно, что data(vec, idx, val)
вставляет val
в vec
, так что это элемент idx
th , а vec
увеличивает его размер на 1. Если idx
находится вне диапазона, он устанавливается на 0 (если < 0
) или vec.size()
(если >= vec.size()
.)
Редактировать:
Визуализация:
Изначально: 4, -6, 0, 8, -7, -7
Первая итерация I = data.size() - 1 = 5
:
4, -6, 0, 8, -7, -7
(data[5] = data[4]
)
4, -6, 0, 8, -7, -7
(data[4] = value
)
(Примечание: здесь-7 = -7
ничего не меняется)
Вторая итерация I = 4
:
4, -6, 0, 8, 8, -7
(data[4] = data[3]
)
4, -6, 0, -7, 8, -7
(data[3] = value
)
Третья итерация I = 3
:
4, -6, 0, 0, 8, -7
(data[3] = data[2]
)
4, -6, -7, 0, 8, -7
(data[2] = value
)
Сейчас I = 2
, более.