C++ 的常见算法 之一

C++ 的常见算法 之一

  • 不修改序列算法
    • for_each
    • count
    • find
  • 修改序列算法
    • copy
    • move

不修改序列算法

for_each

#include <iostream>     // std::cout
#include <algorithm>    // std::for_each
#include <vector>       // std::vectorusing namespace std;struct packet {int  id;int  sz;
};void myfunction(int i) {  // function:cout << ' ' << i;
}void print_packet(packet pkt) {cout << pkt.id << " Size:" << pkt.sz << endl;
}struct myclass {           // function object type:void operator() (int i) { std::cout << ' ' << i; }
} myobject;int for_each_algo() {vector<int> myvector;vector<packet> ptks = {{0x700, 50},{0x701, 90},{0x702, 1000} };myvector.push_back(10);myvector.push_back(20);myvector.push_back(30);cout << "myvector contains:";for_each(myvector.begin(), myvector.end(), myfunction);cout << '\n';// or:std::cout << "myvector contains:";for_each(myvector.begin(), myvector.end(), myobject);std::cout << '\n';cout << "myvector contains:";for_each(ptks.begin(), ptks.end(), print_packet);cout << '\n';return 0;
}

count

#include <iostream>     
#include <algorithm>    
#include <vector>       using namespace std;struct addr {string  street_addr;string  city;string  postcode;bool operator==(const addr& addr1) {if (postcode != addr1.postcode)return 0;return 1;}
};int main () {// counting elements in array:int myints[] = { 10,20,30,30,20,10,10,20 };   // 8 elementsint mycount = std::count(myints, myints + 8, 10);cout << "10 appears " << mycount << " times.\n";// counting elements in container:vector<int> myvector(myints, myints + 8);mycount = std::count(myvector.begin(), myvector.end(), 20);cout << "20 appears " << mycount << " times.\n";vector<addr>  addrs = {{"1024 merivale Rd", "ottawa", "K1Z 6A5"},{"1025 merivale Rd", "ottawa", "K1Z 6A5"},{"335 blossom rd", "san jose", "95123"},{"5970 lean st", "san jose", "95123"},{"5821 falon way", "san jose", "95123"},};addr myaddr = { "", "", "95123" };mycount = count(addrs.begin(), addrs.end(), myaddr);cout << "95123 appears " << mycount << " times.\n";addr myaddr2 = { "", "", "K1Z 6A5" };mycount = count(addrs.begin(), addrs.end(), myaddr2);cout << "95123 appears " << mycount << " times.\n";return 0;
}

find

#include <iostream>     
#include <algorithm>
#include <vector>using namespace std;struct addr {string  street_addr;string  city;string  postcode;int operator==(const addr& addr1) { if (street_addr != addr1.street_addr)return 0;if (city != addr1.city)return 0;if (postcode != addr1.postcode)return 0;return 1;}
};int main() {// using std::find with array and pointer:int myints[] = { 10, 20, 30, 40 };int* p;p = find(myints, myints + 4, 30);if (p != myints + 4)cout << "Element found in myints: " << *p << '\n';elsecout << "Element not found in myints\n";// using std::find with vector and iterator:vector<int> myvector(myints, myints + 4);vector<int>::iterator it;it = find(myvector.begin(), myvector.end(), 30);if (it != myvector.end())cout << "Element found in myvector: " << *it << '\n';elsecout << "Element not found in myvector\n";vector<addr>  addrs = {{"1024 merivale Rd", "ottawa", "K1Z 6A5"},{"1025 merivale Rd", "ottawa", "K1Z 6A5"},};vector<addr>::iterator it_addr;addr myaddr = { "1024 merivale Rd", "ottawa", "K1Z 6A6" };it_addr = find(addrs.begin(), addrs.end(), myaddr);if (it_addr != addrs.end()) {cout << "Address: " << it_addr->street_addr << '\n';cout << "City: " << it_addr->city << '\n';cout << "Post Code: " << it_addr->postcode << '\n';}elsecout << "Address not found in addrs\n";return 0;
}

修改序列算法

copy

#include <iostream> 
#include <algorithm>
#include <vector>using namespace std;void print_val(int v) {cout << " " << v;
};int copy_algo() {int myints[] = { 10,20,30,40,50,60,70 };vector<int> myvector(7);copy(myints, myints + 7, myvector.begin());std::cout << "myvector contains:";for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it)std::cout << ' ' << *it;std::cout << '\n';cout << "for_each: myvector contains:";for_each(myvector.begin(), myvector.end(), print_val);cout << endl;return 0;
}

move

#include <iostream> 
#include <algorithm> 
#include <utility> 
#include <vector>  
#include <string>  using namespace std;int main() {vector<string> foo = { "air","water","fire","earth" };vector<string> bar(4);// moving ranges:cout << "Moving ranges...\n";move(foo.begin(), foo.begin() + 4, bar.begin());cout << "foo contains " << foo.size() << " elements:";cout << " (each in an unspecified but valid state)";cout << '\n';cout << "bar contains " << bar.size() << " elements:";for (auto x : bar) cout << " [" << x << "]";cout << '\n';// moving container:cout << "Moving container...\n";foo = move(bar);cout << "foo contains " << foo.size() << " elements:";for (auto x : foo) cout << " [" << x << "]";cout << '\n';cout << "bar is in an unspecified but valid state";cout << '\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust:常见 GUI 框架

Rust 语言因其性能、安全性和并发能力而广受欢迎&#xff0c;尽管它在标准库中不包含直接的图形用户界面&#xff08;GUI&#xff09;工具&#xff0c;但社区已经开发了多个高质量的第三方库来帮助开发者创建 GUI 应用程序。以下是一些流行的 Rust GUI 框架和工具&#xff1a; …

【论文速读】|FuzzAug:探索模糊测试作为神经网络测试生成的数据增强

本次分享论文&#xff1a;FuzzAug: Exploring Fuzzing as Data Augmentation for Neural Test Generation 基本信息 原文作者&#xff1a;Yifeng He, Jicheng Wang, Yuyang Rong, Hao Chen 作者单位&#xff1a;University of California, Davis 关键词&#xff1a;软件测试…

【电控笔记6.5】标准二阶系统

标准二阶系统通常用于描述动态系统的行为,特别是在控制系统、振动系统和其他物理系统中。标准二阶系统的传递函数通常表示为: [ H(s) = \frac{\omega_n2}{s2 + 2\zeta\omega_n s + \omega_n^2} ] 其中,(\omega_n) 是系统的自然频率,(\zeta) 是阻尼比。 标准二阶系统的特…

使用随机生成的随机数过程中,保存数据到数组中 出现很多null

如果 randomId 是一个较大的数字&#xff0c;那么会在 temp 数组中留下很多空位。可能会导致很多 null 值。将 temp 从数组改为对象&#xff0c;以避免稀疏数组的问题。 稀疏数组&#xff1a;当一个数组中大部分元素为0&#xff0c;或者为同一值&#xff08;也就是说可以不是0…

【鸿蒙学习笔记】Image迭代完备

Image Image($r(app.media.zhibo)).width(96) // 图片宽度.height(96) // 图片高度.borderRadius(12) // 图片圆曲度.objectFit(ImageFit.Fill) // 不明objectFit Column({ space: 20 }) {Row() {Image($r(app.media.startIcon)).width(66).height(66).borderRadius(12)}.bac…

Android SurfaceFlinger——创建EGLSurface(二十三)

我们知道 EGL 就是适配 Android 本地窗口系统和 OpenGL ES 的桥接层,OpenGL ES 定义了平台无关的 GL 绘图指令,EGL 则定义了控制 Displays、Contexts 以及 Surfaces 的统一的平台接口。前面我们已经介绍了 Surface 的相关内容,而对于 EGL 来说同样存在一个与之对应的 Surfac…

结合现货黄金mt4平台 谈谈止损的使用

现在我们做现货黄金交易都可以通过MT4平台来实现从入场到出场的全程操作。所以利用这种网上交易平台&#xff0c;我们能更加好地做止损&#xff0c;下面我们就来讨论一下基于现货黄金MT4平台的止损技巧。 要在现货黄金MT4平台中做好止损&#xff0c;首先我们要确定风险的口子是…

160行代码实现代码雨效果

效果 序言 很喜欢黑客帝国里面那种代码雨的效果&#xff0c;为了锻炼自己的特效编写能力就尝试了一下&#xff0c;花了一下午写出来了。有需要的小伙伴拿去参考. 代码 package com.zgh.myapplication;import android.content.Context; import android.graphics.Canvas; impo…

File类常用构造方法及方法详解

File类是对文件或者目录的一系列操作。如文件和目录的创建、检查、删除、路径获取等。现介绍下常用构造方法和方法。 一、构造方法。 File类提供了多个构造方法来创建File对象&#xff0c;以表示文件或目录。 1. File(String pathname) 通过指定文件路径名创建File对象。 参…

Linux命令大全(面试必备)

前两节有说Git命令&#xff0c;反馈还不错&#xff0c;看来大家对这些必备的命令还挺感兴趣哈&#xff0c;这节就罗列一些Linux必须掌握的命令。 干货满满哦&#xff0c;直接发车... 一、常用的基本命令 1、关机开机 关机 shutdown-h now 立刻关机shutdown-h 3 3分钟后…

文件操作及部分文件函数的介绍学习(上)

目录 前言 1.为什么要要使用文件&#xff1f; 2.什么是文件&#xff1f; 2.1程序文件 2.2数据文件 2.3文件名 4.文件的打开和关闭 4.1 流和标准流 4.1.1流 4.1.2标准流 4.2文件指针 4.3文件的打开和关闭 结语 前言 Hello&#xff0c;亲爱的小伙伴们&#xff0c;作…

Spring的事务传播机制和隔离级别

Spring 提供了强大的事务管理机制,通过 @Transactional 注解或程序化事务管理方式,开发者可以轻松地在应用中启用事务特性。事务传播机制和隔离级别是 Spring 事务管理中的两个重要方面,了解它们有助于更好地控制事务的行为,确保数据的一致性和完整性。 1. 事务传播机制(…

Dungeonborne卡顿怎么办 快速解决Dungeonborne卡顿问题

随着Dungeonborne游戏剧情的深入&#xff0c;玩家将逐渐解锁更多的地图和副本&#xff0c;每个区域都有其独特的生态和敌人。在探索的过程中&#xff0c;玩家不仅可以获得强大的装备和道具&#xff0c;还能结识到志同道合的伙伴&#xff0c;共同面对更强大的敌人。不过也有玩家…

基于Pinia的WebSocket管理与优化实践(实现心跳重连机制,异步发送)

WebSocket作为一种全双工通信协议&#xff0c;允许服务器和客户端之间建立持久的连接&#xff0c;提供了比传统HTTP请求更为高效的数据交换方式。本文将探讨如何使用Pinia状态管理库在Vue应用中优雅地管理和优化WebSocket连接&#xff0c;以实现稳定、高效的实时数据传输。 环境…

用python设计一个闹钟程序

1 问题 大学生有早八赖床的现象&#xff0c;如何让赖床的自己准时赶上早八呐&#xff1f; 2 方法 用解决问题的步骤采用如下方式&#xff1a; 用import导入datetime&#xff0c;time&#xff0c;winsound;获取用户设定的时间和当前的时间;用设定的时间减去现在的时间进行判断是…

Scala学习笔记15: 文件和正则表达式

目录 第十五章 文件和正则表达式1- 读取行2- 从URL或者其它源读取3- 写入文本文件4- 序列化5- 正则表达式6- 正则表达式验证输入数据格式end 第十五章 文件和正则表达式 1- 读取行 在Scala中读取文件中的行可以通过不同的方法实现 ; 一种常见的方法是使用 scala.io.Source 对…

k8s-第三节-工作负载

工作负载分类 ReplicaSet Deployments是比ReplicaSet更高级的概念&#xff0c;它会管理ReplicaSet并提供很多其它有用的特性&#xff0c;最重要的是Deployments支持声明式更新&#xff0c;声明式更新的好处是不会丢失历史变更。所以Deployment控制器不直接管理Pod对象&#x…

新加坡很火的slots游戏代投Facebook广告新流量趋势

新加坡很火的slots游戏代投Facebook广告新流量趋势 在新加坡这片充满活力的土地上&#xff0c;Slots游戏以其独特的魅力和吸引力&#xff0c;迅速成为了许多玩家的心头好。而Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;为Slots游戏的推广提供了得天独厚的…

三、数据库系统(考点篇)

1、三级模式一两级映像 内模式&#xff1a;管理如何存储物理的 数据 &#xff0c;对数据的存储方式、优化、存放等。 模式&#xff1a;又称为概念模式&#xff0c; 就是我们通常使用的表这个级别 &#xff0c;根据应用、需求将物理数据划分成一 张张表。 外模式&#xff1a;…

【算法:贪心】:贪心算法介绍+基础题(四个步骤);柠檬水找零(交换论证法)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 前言&#xff1a; 暑假马上就要留校学习算法了&#xff0c;现在先学习一下基本的算法打打基础。本篇要讲的是…