c/c++ lambda 表達式 介紹

来源:https://www.cnblogs.com/xiaoshiwang/archive/2018/09/18/9666962.html
-Advertisement-
Play Games

lambda 表達式 介紹 問題:假設有個需求是,在vector\找出所有長度大於等於4的元素。標準庫find_if函數的第三參數是函數指針,但是這個函數指針指向的函數只能接受一個參數,這個參數是vector\里的元素。這時問題就來了,長度4無法作為參數傳遞, 腫麽辦??? 解決辦法:使用lambd ...


lambda 表達式 介紹

問題:假設有個需求是,在vector<string>找出所有長度大於等於4的元素。標準庫find_if函數的第三參數是函數指針,但是這個函數指針指向的函數只能接受一個參數,這個參數是vector<string>里的元素。這時問題就來了,長度4無法作為參數傳遞,

腫麽辦???

解決辦法:使用lambda。

lambda簡單介紹:多了一個捕獲列表的無名內聯函數。

[capture list] (parameter list) -> return type { function body }

捕獲列表,參數列表(可省略),返回值類型(可省略),函數體。

具體做法:把問題中的長度4作為捕獲列表,把vector<string>里的元素作為參數列表,傳遞個lambda表達式,就解決了上述問題,

完美!!!

#include <iostream>
#include <array>
#include <vector>
#include <algorithm>
#include <list>
#include <deque>
#include <numeric>
#include <forward_list>

using namespace std;

//刪除重覆的元素                                                                
void delDups(vector<string> &svec){
  sort(svec.begin(),svec.end());
  auto end_u = unique(svec.begin(),svec.end());
  svec.erase(end_u, svec.end());
}
//自定義的排序規則                                                              
bool shorter(const string s1, const string s2){
  return s1.size() < s2.size();
}
//用lambda作為參數                                                              
void bigger(vector<string> &words,
            vector<string>::size_type sz){
  delDups(words);
  //用lambda作為第三個參數                                                      
  stable_sort(words.begin(), words.end(),
              [](const string &s1, const string &s2){
                return s1.size() < s2.size();
              });
  //把長度參數sz作為捕獲列表,傳遞給lambda表達式
  auto idx = find_if(words.begin(),words.end(),
                     [sz](const string &s){
                       return s.size() >= sz;
                     });
  auto cnt = words.end() - idx;
  cout << cnt << " word's length >= " << sz << endl;
  for_each(idx, words.end(),[](const string &s){
      cout << s << " ";
    });
  cout << endl;
}
int main(){
  //test1 自定義排序演算法                                                        
  /*                                                                            
  vector<string> svec{"the","quick","red","fox","jumps",                        
      "over", "the","slow","red","turtle"};                                     
  delDups(svec);                                                                
  //先按長度排序,長度相同的,再用字典順序排序                                  
  stable_sort(svec.begin(),svec.end(),shorter);                                 
  for(const auto &s : svec){                                                    
    cout << s << " ";                                                           
  }                                                                             
  cout << endl;                                                                 
  */

  //test2 用lambda作為參數                                                      
  vector<string> svec{"the","quick","red","fox","jumps",
      "over", "the","slow","red","turtle"};
  bigger(svec, 4);

}

c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Appium是一個開源測試自動化框架,用於本機、混合和移動Web應用程式,它使用WebDriver 協議驅動 iOS、Android和Windows應用程式。 ...
  • 這段時間開發了一個微信小程式,雖然小程式的導航API 官方文檔寫得很詳細,但是在具體開發過程中還是會遇到很多不明白,或者一時轉不過彎的地方。 1、頁面切換傳參,參數讀取 1.1 wx.navigateTo(Object) 功能:保留當前頁面,跳轉到應用內的某個頁面,但是不能跳到 tabbar 頁面。 ...
  • 開發現狀 隨著技術的發展,移動開發設備遍地開花,各種各樣的移動設備不如人們的家庭。移動設備不局限於手機、IPA等設備。由於Android開源,可在條款允許範圍內修改代碼二次開發,結合物聯網技術的迅速普及,各種Android應用進入物聯網之中。智能手機、智能電視等各種擁有交互需求的設備大部分都是基於A ...
  • 概述 ScreenMatch是根據你的需要,生成需要適配的尺寸的文件,手機會根據屏幕相關參數自動尋找合適的尺寸文件 添加插件 如圖,打開Android Studio的Settings設置,找到Plugins,點擊Browse Repositories,在彈出的輸入框里填入screenMatch,就可 ...
  • https://www.cnblogs.com/chenqf/p/6386163.html 前言 Http 緩存機製作為 web 性能優化的重要手段,對於從事 Web 開發的同學們來說,應該是知識體系庫中的一個基礎環節,同時對於有志成為前端架構師的同學來說是必備的知識技能。但是對於很多前端同學來說, ...
  • 1)名字VS值 名字和記憶體(存儲)位置相關聯。 名字—(環境)———>位置——(狀態)——>值 這兩個映射都在隨著程式的運行而改變。 2)環境VS狀態 環境是指一個名字到存儲位置映射,也可以說是名字到變數(左值)的映射,環境的改變需要遵守語言的作用於與規則; 狀態是一個從記憶體位置到它的值的映射,即把 ...
  • 上篇介紹了Util的開發環境,並讓你把Demo運行起來。本文將介紹該Demo的前端Angular運行機制以及目錄結構。 目錄結構 在VS上打開Util Demo,會看見如下的目錄結構。 現代前端通常採用VS Code開發,不過我們為了使用TagHelper,需要採用VS開發,這為你提供了更多的選擇。 ...
  • 題意 題目鏈接 求出把$n$分解為斐波那契數的方案數,方案兩兩不同的定義是分解出來的數不完全相同 Sol 這種題,直接爆搜啊。。。 打表後不難發現$<=1e18$的fib數只有88個 最先想到的應該是直接把$n$加入到搜索狀態里,然後枚舉能被分成哪些 但是這樣分解出來的數可能會有重覆的,因此我們還要 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...