让C++写起来和Python一样简单的库range-v3
来源:互联网 发布:linux修改文件夹命令 编辑:程序博客网 时间:2024/06/07 01:45
最近看了一篇博文:C++ 17 写法上已经很接近 python 了。这里引出了一个很骚的库:range-v3。这个库可以让C++更加容易实现filter/mapreduce/sort/iterator等函数。
range-v3需要clang 3.6.2 及以上和GCC 4.9.1及以上的编译器版本支持,毕竟里面好多代码是以C++11/14/17为基础写的。
源码地址:https://github.com/ericniebler/range-v3。
一.安装:
在win和linux系统下都可以
git clone https://github.com/ericniebler/range-v3.git
然后把range-v3-0.3.0\include下的所有文件复制到你的GCC/Clang目录的include目录下,然后就可以使用了:
#include <chrono>#include <iostream>#include <range/v3/all.hpp>using namespace ranges;int main(){ auto triples = view::for_each(view::ints(1), [](int z) { return view::for_each(view::ints(1, z+1), [=](int x) { return view::for_each(view::ints(x, z+1), [=](int y) { return yield_if(x*x + y*y == z*z, std::make_tuple(x, y, z)); }); }); }); //// This alternate syntax also works: //auto triples = ints(1) >>= [] (int z) { return // ints(1, z+1) >>= [=](int x) { return // ints(x, z+1) >>= [=](int y) { return // yield_if(x*x + y*y == z*z, // std::make_tuple(x, y, z)); };}; }; // Display the first 100 triples RANGES_FOR(auto triple, triples | view::take(100)) { std::cout << '(' << std::get<0>(triple) << ',' << std::get<1>(triple) << ',' << std::get<2>(triple) << ')' << '\n'; }}class timer{private: std::chrono::high_resolution_clock::time_point start_;public: timer() { reset(); } void reset() { start_ = std::chrono::high_resolution_clock::now(); } std::chrono::milliseconds elapsed() const { return std::chrono::duration_cast<std::chrono::milliseconds>( std::chrono::high_resolution_clock::now() - start_); } friend std::ostream &operator<<(std::ostream &sout, timer const &t) { return sout << t.elapsed().count() << "ms"; }};void benchmark(){ // Define an infinite range containing all the Pythagorean triples: auto triples = view::for_each(view::ints(1), [](int z) { return view::for_each(view::ints(1, z+1), [=](int x) { return view::for_each(view::ints(x, z+1), [=](int y) { return yield_if(x*x + y*y == z*z, std::make_tuple(x, y, z)); }); }); }); static constexpr int max_triples = 3000; timer t; int result = 0; RANGES_FOR(auto triple, triples | view::take(max_triples)) { int i, j, k; std::tie(i, j, k) = triple; result += (i + j + k); } std::cout << t << '\n'; std::cout << result << '\n'; result = 0; int found = 0; t.reset(); for(int z = 1;; ++z) { for(int x = 1; x <= z; ++x) { for(int y = x; y <= z; ++y) { if(x*x + y*y == z*z) { result += (x + y + z); ++found; if(found == max_triples) goto done; } } } }done: std::cout << t << '\n'; std::cout << result << '\n';}
以上代码会打印出单边小于200的满足勾股定理的三角形的三条边长度。
阅读全文
0 0
- 让C++写起来和Python一样简单的库range-v3
- [C#] 自己封装的一个数据库访问类 让ado.net 用起来和ado一样
- [C#] 自己封装的一个数据库访问类 让ado.net 用起来和ado一样
- [C#] 自己封装的一个数据库访问类 让ado.net 用起来和ado一样
- [C#] 自己封装的一个数据库访问类 让ado.net 用起来和ado一样
- Extjs 让combobox写起来更简单
- 怎么让Java写的程序和SQL2008数据库连接起来
- 可爱的 Python:用 Psyco 让 Python 运行得像 C 一样快
- 可爱的 Python:用 Psyco 让 Python 运行得像 C 一样快
- Python 的range和xrange
- Python的range和xrange
- Python的range和xrange
- python的range和linspace
- !如何让es6 写的 文件 import 起来
- 如何让es6 写的 文件 import 起来
- 用 Psyco让Python运行得像C一样快
- 用Psyco让Python运行得像C一样快
- Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来
- python类的调用与方法的调用,函数修饰
- b+树以及在Mysql中的使用
- centos7系统安装完成后一些基本的优化
- 9.15【周总结-数论】
- android中的图片(文件)的上传
- 让C++写起来和Python一样简单的库range-v3
- ctdb原理介绍
- 在虚拟机中安装Ubuntu 14.04.5 Desktop并安装Code::Blocks及一些其它软件
- 先码后看 spring IOC原理(WebApplicationContext、ContextLoaderListener) 转侵删
- 资讯·阿里云又升级了!
- 整数奇偶排序
- opencv3 画轮廓
- Spring注解@Component、@Repository、@Service、@Controller区别
- 字符串转化