С позволения _LYNX_, я допишу комментарий к его программе

Надеюсь я не нарушу его авторских прав
vector<float> input_arr, output_arr;
/*входной и выходной вектор (массив), способный изменять количество элементов, во время выполнения программы, см. подробнее STL */
//Заполняем входной массив
for (...) {
input_arr.push_back(f);
/*функция push_back, является функцией-членом класса vector, и добавляет в конец вектора новый элемент f.*/
}
int len=input_arr.size();
/*size - также является функцией-членом класса vector и определяет размер вектора*/
for(int i=0;i<len+2;++i){
int a1=0, a2=0, a3=0, g;
if(i>1)a1=input_arr[i-2];
if(i>0&&i<len+1)a2=input_arr[i-1];
if(i<len)a3=input_arr[i];
/*Надеюсь выше всё понятно

*/
g=(a1>a2)?((a3>a1)?a1a3>a2)?a3:a2)(a3>a2)?a2a3>a1)?a3:a1);
/*А в этой строке переменной g присваивается значение, вычисляемое на базе логических сравнений. оператор '?' трактуется следующим образом:
"если выражение (a1>a2) истино, тогда переменной g присвоить значение находящееся до символа ':', если выражение ложно - после символа ':' "
Короче говоря:
результат = выражение ? выражение1 : выражение2
если результат == true, тогда результат=выражение1
иначе - результат=выражение2
ИМХО очень удобная конструкция!*/
output_arr.push_back(g);//Здесь я думаю всё ясно
}
...
//Дерзай