介紹lambda表示式的文章有很多,這裡不是講怎麼用,而是講為什麼要用。
想象乙個場景:最常見的操作就是要遍歷乙個容器(陣列、vector、list……),然後對每個元素進行特定操作。
for(auto iter = array.begin(); iter != array.end(); ++iter)
程式猿都是懶惰的,每次都要敲乙個for迴圈太費勁了。如果這個操作是經常使用的,定義乙個本地函式(或private的方法)。但是如果每次遍歷中的操作又略微有些小差別,咋辦呢?
stl給了我們很好的工具: for_each函式,不用關心容器型別,只需要傳入begin()和end()迭代器,再附帶乙個函式指標,或者函式物件(仿函式,強烈推薦使用這個),一切都搞定了!
for_each(array.begin(), array.end(), myfunc());
一行搞定原來三行內容,哈哈,真哈皮!!
等等,猿猿的要求不止這些,如果要求在這個函式中列印出外部作用域的乙個變數,比如:
int base = 20;
for_each(array.begin(), array.end(), myfunc());
// how to print base in myfunc ?
雖然函式物件可以保持乙個變數在類中,但是我還想同時改變這個變數就有點力不從心了。(其實用指標可以做到,可是,變化的地方在作用域外定義,是不是有點奇怪呢?)
輪到lambda表示式大顯身手了
int base = 20;
for_each(array.begin(), array.end(), [&base](typename iterator_traitsval)
);
寫完才發現,我們居然省下絞盡腦汁給函式取名字的功夫,而且對base的改變操作又屬於in place。十分優雅!
C 11中的Lambda表示式
c 11中的lambda表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda的語法形式如下 函式物件引數 操作符過載函式引數 mutable或exception宣告 返回值型別 可以看到,lambda主要分為五個部分 函式物件引數 操作符過載函式引數 mutable或exceptio...
C 11 中的 Lambda 表示式
c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 mutable 或...
c 11的lambda表示式
c 11的一大亮點就是引入了lambda表示式。利用lambda表示式,可以方便的定義和建立匿名函式。對於c 這門語言來說來說,lambda表示式 或 匿名函式 這些概念聽起來好像很深奧,但很多高階語言在很早以前就已經提供了lambda表示式的功能,如c python等。lambda表示式就是匿名函...