C++之STL算法(1)

??STL容器算法主要由、、組成;
??algorithm主要有遍歷、比較、交換、查找、拷貝、修改等;

1.遍歷容器for_each

??for_each()函數用于完成容器遍歷,函數參數如下:

for_each(_InIt _First, _InIt _Last, _Fn _Func)
形參:_First、_Last --容器的起始和結束迭代器_Func -->仿函數(回調函數),處理要輸出的信息

1.1 vector容器遍歷

??自定義數據格式:

class Person
{friend class mycompare;friend class Myprint;//友元類friend void Print(const Person& p);//友元函數
public:Person() {}Person(string name, int age) :name(name), age(age) {}Person(const Person& p){name = p.name;age = p.age;}bool operator<(const Person& p)const{if (this->age == p.age){return p.name < p.name;}return this->age > p.age;}
private:string name;int age;
};
void Print(const Person& p)
{cout << "姓名:" << p.name << "\t年齡:" << p.age << endl;
}
class Myprint
{
public:void operator()(const Person& p){cout << "姓名:" << p.name << "\t年齡:" << p.age << endl;}void operator()(const pair<Person, int>& p){cout << "姓名:" << (p.first).name << "\t年齡:" << (p.first).age << "\t成績:" << p.second << endl;}
};
class mycompare
{
public:bool operator()(const Person& p1,const Person& p2)const{if (p1.age == p2.age){return p1.name < p2.name;}return p1.age > p2.age;}
};
void vector_test()
{cout << "\tvector容器示例:" << endl;//創建vector容器--->單端數組vector<Person>vtr;vtr.push_back(Person("小王", 18));vtr.push_back(Person("小林", 18));vtr.push_back(Person("小李", 18));vtr.push_back(Person("小劉", 18));cout << "提供一個函數示例:" << endl;for_each(vtr.begin(), vtr.end(), Print);cout << "提供一個仿函數示例:" << endl;for_each(vtr.begin(), vtr.end(), Myprint());
}

1.2 list容器遍歷

void list_test()
{//創建一個list容器-->雙向鏈表cout << "\tlist容器示例:" << endl;list<Person> t;t.push_back(Person("小王", 18));//尾插t.push_front(Person("小林", 18));//頭插t.push_back(Person("小李", 18));t.push_back(Person("小劉", 18));cout << "提供一個仿函數示例:" << endl;for_each(t.begin(), t.end(), Myprint());
}

1.3 set容器遍歷

void set_test()
{cout << "\tset/multiset關聯式容器:" << endl;multiset<Person>mt;//該容器會自動排序mt.insert(Person("小王", 18));mt.insert(Person("小林", 18));mt.insert(Person("小李", 17));mt.insert(Person("小劉", 18));mt.insert(Person("小李", 22));for_each(mt.begin(), mt.end(), Myprint());cout << "\tset/multiset關聯式容器(仿函數示例):" << endl;multiset<Person, mycompare>mt2;mt2.insert(Person("小王", 18));mt2.insert(Person("小林", 18));mt2.insert(Person("小李", 17));mt2.insert(Person("小劉", 18));mt2.insert(Person("小李", 22));for_each(mt.begin(), mt.end(), Myprint());
}

1.4 map容器遍歷

void map_test()
{cout << "\tmap關聯式容器示例:" << endl;multimap<Person, int>mp;mp.insert(make_pair(Person("小王", 18), 88));mp.insert(pair<Person,int>(Person("小林", 18),99));mp.insert(pair<Person, int>(Person("小李", 17), 95));mp.insert(pair<Person, int>(Person("小劉", 18), 95));mp.insert(pair<Person, int>(Person("小李", 22), 90));for_each(mp.begin(), mp.end(), Myprint());
}

1.5 整體運行效果

int main()
{vector_test();//vector容器list_test();//list容器set_test();//set容器map_test();//map容器system("pause");
}

在這里插入圖片描述

2.轉移元素transform

transform函數:transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func)將一個函數中的元素拷貝到另一個容器中,_First、_Last --要轉移的容器的起始迭代器和結束迭代器_Dest --目標容器的起始迭代器_Func --仿函數,支持一元運算,可以對當前值進行+ - *  等各種運算
  • 使用示例:
#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
/*
transform函數:transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func)將一個函數中的元素拷貝到另一個容器中,_First、_Last --要轉移的容器的起始迭代器和結束迭代器_Dest --目標容器的起始迭代器_Func --仿函數,支持一元運算,可以對當前值進行+ - * \ 等各種運算
*/
class myprint
{
public:void operator()(int val){cout << val << " ";}
};
class myfunc
{
public:int operator()(int val1){return val1;}
};void test()
{vector<int>t1;for (int i = 0; i < 10; i++){int temp = rand() % 101;t1.push_back(temp);}cout << "原容器數據:" << endl;for_each(t1.begin(), t1.end(), myprint());cout << endl;vector<int>target;target.resize(t1.size());//設置target容器大小transform(t1.begin(), t1.end(), target.begin(), myfunc());cout << "轉移后的容器內容:" << endl;for_each(target.begin(), target.end(), myprint());cout << endl;
}
int main()
{test();system("pause");
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215113.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215113.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215113.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習 Day10——T10數據增強

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制 文章目錄 前言一、我的環境二、代碼實現與執行結果1.引入庫2.設置GPU&#xff08;如果使用的是CPU可以忽略這步&#xff09;3.導入數據4.查…

4-Docker命令之docker update

1.docker update介紹 docker update命令是用于更新一個或多個docker容器的配置 2.docker update用法 docker update [參數] container [container......] [root@centos79 ~]# docker update --helpUsage: docker update [OPTIONS] CONTAINER [CONTAINER...]Update configu…

編寫函數計算一個或不特定多個數的乘積

編寫函數計算一個或不特定多個數的乘積 輸入樣例&#xff1a; 3 2 1 輸出樣例&#xff1a; 6.0000 def caculate(*t):r1for x in t:r*xreturn r s input().split() t [float(x) for x in s] print("%.4f" % caculate(*t))

Docker基礎概念解析:鏡像、容器、倉庫

當談到容器化技術時&#xff0c;Docker往往是第一個被提及的工具。Docker的基礎概念涵蓋了鏡像、容器和倉庫&#xff0c;它們是理解和使用Docker的關鍵要素。在這篇文章中&#xff0c;將深入探討這些概念&#xff0c;并提供更豐富的示例代碼&#xff0c;幫助大家更好地理解和應…

智能優化算法應用:基于混合蛙跳算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于混合蛙跳算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于混合蛙跳算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.混合蛙跳算法4.實驗參數設定5.算法結果6.…

2023年華為HCIA認證H12-811題庫講解

在VRP平臺上&#xff0c;可以通過下面哪種方式返回到上一條歷史命令&#xff1f;&#xff08; &#xff09; A、Ctr1U B、Ctr1P C、左光標 D、上光標 試題答案&#xff1a;BD 試題解析&#xff1a;在VRP系統中&#xff0c;ctrlU為自定義快捷鍵&#xff0c;ct…

路由和網絡周期

### 路由&#xff08;Routing&#xff09;&#xff1a; 1. **路由的概念&#xff1a;** 路由是用于確定用戶在網站或應用程序中所處位置的機制。它可以將不同的 URL 映射到對應的頁面或視圖組件&#xff0c;使得用戶可以通過不同的 URL 訪問不同的內容。 2. **路由器&#xf…

DevEco Studio 3.1IDE環境配置(HarmonyOS 3.1)

DevEco Studio 3.1IDE環境配置&#xff08;HarmonyOS 3.1&#xff09; 一、安裝環境 操作系統: Windows 10 專業版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、環境安裝 IDE下載地址&#xff1a;HUAWEI DevEco Studio和SDK下載和升級 | HarmonyOS開發者 IDE的安裝就是…

Android---Kotlin 學習002

聲明變量 在 Kotlin 中定義一個變量&#xff0c;通過關鍵字 var 開始。然后是變量名&#xff0c;在“:”后緊跟變量類型。 示例1&#xff1a;聲明一個 int 類型的變量 var num:Int 1 示例2&#xff1a;聲明一個 String 類型的變量 var str:String "Hello world&quo…

計算機網絡——期末考試復習資料

什么是計算機網絡 將地理位置不同的具有獨立功能的多臺計算機及其外部設備通過通信線路和通信設備連接起來&#xff1b;實現資源共享和數據傳遞的計算機的系統。 三種交換方式 報文交換&#xff1a;路由器轉發報文&#xff1b; 電路交換&#xff1a;建立一對一電路 分組交換&a…

2024 年 SEO 現狀

搜索引擎優化&#xff08;SEO&#xff09;一直以來都是網絡知名度和成功的基石。隨著我們踏上 2024 年的征程&#xff0c;SEO領域正在經歷重大變革&#xff0c;有些變革已經開始&#xff0c;這對企業、創作者和營銷人員來說既是挑戰也是機遇。 語音搜索 語音搜索曾是一個未來…

可以組成網絡的服務器 - 華為OD統一考試(C卷)

OD統一考試&#xff08;C卷&#xff09; 分值&#xff1a; 200分 題解&#xff1a; Java / Python / C 題目描述 在一個機房中&#xff0c;服務器的位置標識在n*m的整數矩陣網格中&#xff0c;1表示單元格上有服務器&#xff0c;0表示沒有。如果兩臺服務器位于同一行或者同一列…

HTML常用表單元素使用?

目錄 一、常用表單元素使用的關鍵字二、常用表單元素使用的效果與作用&#xff08;1&#xff09;password : 保護用戶的隱私(2) email: 輸入郵件&#xff08;比如QQ郵件&#xff09;(3)、number : 輸入框只能輸入數字&#xff08;4&#xff09;、tel : 常用于輸入電話號&#x…

Kubernetes實戰(十二)-使用kubeconfig文件管理多套kubernetes(k8s)集群

1 概述 在生產環境中可能不止有一套kubernetes(k8s)集群&#xff0c;面對多套集群&#xff0c;運維人員可以使用kubeconfig文件管理多套kubernetes(k8s)集群&#xff0c;使用 kubeconfig 文件&#xff0c;可以組織集群、用戶和命名空間&#xff0c;還可以定義上下文&#xff0…

深入理解模板引擎:解鎖 Web 開發的新境界(上)

&#x1f90d; 前端開發工程師&#xff08;主業&#xff09;、技術博主&#xff08;副業&#xff09;、已過CET6 &#x1f368; 阿珊和她的貓_CSDN個人主頁 &#x1f560; 牛客高級專題作者、在牛客打造高質量專欄《前端面試必備》 &#x1f35a; 藍橋云課簽約作者、已在藍橋云…

Axure安裝及面板各區域詳解

目錄 一、Axure簡介 二、Axure安裝及使用準備 2.1 Axure官網 2.2 Axure授權 2.3 Axure漢化 2.4 設置RP文件保存路徑 三、Axure菜單欄的使用 3.1 新建項目 3.2 新建元件庫 3.3 自動備份設置 3.4 頁面畫布網格設置 四、Axure工具欄 4.1 選擇模式 4.1.1 相交選中 4…

【AI算力】關于國產算力的一些調研分析

隨著英偉達卡被禁售&#xff0c;國產顯卡市場逐漸崛起。以華為、曙光為第一梯隊代表&#xff0c;壁仞、燧原、寒武紀等為第二梯隊代表&#xff0c;場景覆蓋從圖像識別到大模型訓練、推理&#xff0c;落地領域包括金融、安防、智能汽車、IOT、智能客服等行業 國內主流的GPU提供…

深度學習 Day15——P4猴痘病識別

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制 文章目錄 前言1 我的環境2 代碼實現與執行結果2.1 前期準備2.1.1 引入庫2.1.2 設置GPU&#xff08;如果設備上支持GPU就使用GPU,否則使用C…

前端食堂技術周刊第 108 期:StyleX 開源、Astro 4.0、Vitest v1、URL 設計最佳實踐、INP

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;大紅袍鮮奶茶 食堂技術周刊倉庫地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童歐巴。歡迎來到前端食堂技術周刊&#xff0c;我們先來…

廟算兵棋推演平臺配置

9月23開始&#xff0c;9月26完成。因為那時剛從大連回來&#xff0c;十一之后又一個緊急項目當項目負責人&#xff0c;所以隔了這么久才發出來。 我嘗試進行制作平臺AI&#xff0c;想在我的小平板上配好&#xff0c;最好還可以移植。于是我采用WSL&#xff08;windows自帶的do…