2013-02-27 3 views
0

Каков эффект этого заявления:В чем смысл [=] (...) {...} в C++?

std::replace_if(ln.begin(),ln.end(),[=](int c){return c=='\n'||c==' ';},0); 

В частности, я хотел бы знать:

Что смысл

[=](int c){return c=='\n'||c==' ';} 

Где грамматика для этого определена?

ответ

1

Это лямбда-функция. Функция, которая не имеет имени и определена внутри кода. Он добавлен в C++ с C++ 11 Standard. Итак, это относительно новое.

Вы можете прочитать о них here

1

Это лямбда. Он заменяет целые числа c в контейнере ln с 0, если c == '\n' или c == ' '. Поскольку контейнер, похоже, содержит символы, вы можете сказать, что он заменяет пробелы и символы новой строки символами с нулевым завершающим символом.

2

[=] (целое с) {вернуться с == '\ п' || с ==»«;}

является лямбда-выражение, которое создает безымянного объект функции. Он вызывается с одним параметром и возвращает логическое значение. Квадратные скобки - это так называемый «лямбда-интродуктор», который содержит так называемый «захват-предложение». Предложение capture указывает компилятору, как объект лямбда захватывает окружающие локальные переменные.

станд :: replace_if (ln.begin(), ln.end(), [=] (целое с) {вернуться с == '\ п' || с ==»«;}, 0);

replace_if принимает два итератора для последовательности, функтор (точнее: предикат) и другое значение. Он выполняет итерацию по элементам последовательности, которая называется ln, и заменяет каждый элемент 0, если данный предикат (выражение лямбда) возвращает true для этого элемента.

Таким образом, эта строка кода заменяет каждый символ пробела и строки в ln нулевым терминатором.

Смежные вопросы