当前位置: 首页 > news >正文

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.lryc.cn/news/392219.html

相关文章:

  • 微前端的需求有哪些?微前端的原理是怎么样的?为什么这么设计,及微前端的应用场景是什么?对有些客户,前端的重要性高于后端
  • 【Spring Boot】统一数据返回
  • 证券交易系统中服务器监控系统功能设计
  • 【线性代数的本质】矩阵与线性变换
  • CV02_超强数据集:MSCOCO数据集的简单介绍
  • Linux--信号(万字详解!超完整!)
  • onnx模型转rknn到部署
  • lua入门(1) - 基本语法
  • Finding Global Homophily in Graph Neural Networks When Meeting Heterophily
  • DisFormer:提高视觉动态预测的准确性和泛化能力
  • Android SurfaceFlinger——Surface和Layer介绍(十九)
  • C++基础(七):类和对象(中-2)
  • 对秒杀的思考
  • 数据结构预科
  • 想做亚马逊测评技术需要解决哪些问题,有哪些收益?
  • 1117 数字之王
  • 关于ORACLE单例数据库中的logfile的切换、删除以及添加
  • Linux高并发服务器开发(十三)Web服务器开发
  • 人工智能系列-NumPy(二)
  • [单master节点k8s部署]19.监控系统构建(四)kube-state-metrics
  • 字符串函数5-9题(30 天 Pandas 挑战)
  • 【C语言题目】34.猜凶手
  • C++ 多进程多线程间通信
  • 怎么做防御系统IPS
  • 达梦数据库的系统视图v$auditrecords
  • Spring Boot与MyBatis-Plus:代码逆向生成指南
  • 【MySQL】mysql访问
  • (1)Jupyter Notebook 下载及安装
  • 监控平台zabbix对接grafana
  • 14-11 2024 年的 13 个 AI 趋势