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

网站做投票系统/二十条优化措施

网站做投票系统,二十条优化措施,做网站要求电脑配置,jsp网站开发典型模块与实例精讲bind() 和 lambda 表达式都可以实现类似的功能,在使用的时候有时候不知道选择哪一个。这里来做一个简单的总结。主要参考了一下的文章: http://stackoverflow.com/questions/1930903/bind-vs-lambda http://www.gockelhut.com/c/articles/lambda_vs_bind…

  bind() 和 lambda 表达式都可以实现类似的功能,在使用的时候有时候不知道选择哪一个。这里来做一个简单的总结。主要参考了一下的文章:

http://stackoverflow.com/questions/1930903/bind-vs-lambda

http://www.gockelhut.com/c++/articles/lambda_vs_bind

1. bind() 在多层嵌套的时候会使代码非常难看懂(参见文章一)

2. lambda 不支持“多态性”(其实就是泛型),需要在定义的时候指定参数类型

3. lambda 运行速度会比bind() 函数快很多

4. lambda 可以通过 std::function 实现“多态”特性

下面是一个例子,表明lambda 的运行时间比bind 的情况要快很多:

#include <cstdint>
#include <chrono>
#include <iostream>
#include <string>
#include <functional>
#include <thread>class timer
{
public:typedef std::chrono::high_resolution_clock clock;typedef clock::time_point                  time_point;typedef clock::duration                    duration;public:timer(){reset();}void reset(){_starttime = clock::now();}duration elapsed() const{return clock::now() - _starttime;}
protected:time_point _starttime;
};template <typename T>
void volatile_write(const T& x)     
{volatile T* p = new T;*p = x;delete p;
}template <typename Function>
void run_test(const std::string& name, Function func)
{std::cout << name;timer t;                //初始化的时候已经开始计时volatile_write(func());timer::duration duration = t.elapsed();std::cout << '\t' << duration.count() << std::endl;
}template <typename Function>
void do_test_loop(Function func, const uint64_t upper_limit = 100000)
{for (uint64_t i = 0; i < upper_limit; ++i)func(i);
}uint64_t test_accumulate_lambda()
{uint64_t x = 0;auto accumulator = [&x] (uint64_t i) { x += i; };do_test_loop(accumulator);return x;
}void test_accumulate_bind_function(uint64_t& x, uint64_t i)
{x += i;
}uint64_t test_accumulate_bind()
{namespace arg = std::placeholders;uint64_t x = 0;std::function<void (uint64_t)> accumulator = std::bind(&test_accumulate_bind_function, std::ref(x), arg::_1);do_test_loop(accumulator);return x;
}
uint64_t test_accumulate_bind_auto()
{namespace arg = std::placeholders;uint64_t x = 0;auto accumulator = std::bind(&test_accumulate_bind_function, std::ref(x), arg::_1);do_test_loop(accumulator);return x;
}uint64_t test_accumulate_bound_lambda()
{uint64_t x = 0;std::function<void (uint64_t)> accumulator = [&x] (uint64_t i) { x += i; };do_test_loop(accumulator);return x;
}int main()
{run_test("Accumulate (lambda)            ", &test_accumulate_lambda);run_test("Accumulate (bind)              ", &test_accumulate_bind);run_test("Accumulate (bound lambda)      ", &test_accumulate_bound_lambda);run_test("Accumulate (bind_auto)        ", &test_accumulate_bind_auto);return 0;
}

运行结果:

C:\Windows\system32\cmd.exe /c lambda_vs_bind.exe
Accumulate (lambda) 20001
Accumulate (bind) 110007
Accumulate (bound lambda) 50003
Accumulate (bind_auto) 90005
Hit any key to close this window...

 

从运行结果可以看出,使用lambda比bind快一个数量级,使用auto 修饰函数对象比用std::function<>速度也略有提升。

 

http://www.lbrq.cn/news/1531027.html

相关文章:

  • 通辽建设公司网站/百度官网电话客服24小时
  • 做直播网站赚钱/央视新闻的新闻
  • 网站怎么做二维码/市场调研报告
  • 创建一个网站/建站工具
  • 网站建设公司做销售好不好/sem投放是什么意思
  • 湖北工程建设总承包有限公司网站/全网霸屏推广系统
  • 中国人事建设部网站/新型网络搜索引擎
  • 如何查询网站是哪家公司做的/女生读网络营销与电商直播
  • 网站设计前期沟通单/如何优化关键词的方法
  • seo是什么服/关键词快速优化排名软件
  • 如何做转发文章赚钱的网站/营销网站建设价格
  • 昆明网站制作方案/宁波seo博客
  • 本溪建网站/广州排名推广
  • yii2框架做的网站有哪些/南京百度竞价推广公司排名
  • 网站多语言建设方案/百度西安
  • 给网站做排名优化学什么好处/百度手机助手网页
  • 梦织做网站/蚂蚁链接bt链接
  • 一般建设网站的布局/模板网站建设开发
  • 网站开发的价格/创意营销案例
  • 做网站收录/广州seo优化外包服务
  • 如何做国外销售网站/营销案例分享
  • 自学网站建设好学吗/疫情二十条优化措施
  • 做网站 如何注册公司/google商店
  • 政府门户网站集群建设工程招标/软文街
  • 无基础想学室内设计/快照关键词优化
  • 霸州做网站1766534168/热点新闻最新消息
  • 台州地区网站建设/免费网站推广网站在线
  • 临沂网站建设哪家更好/软文素材库
  • 基于c 的网站开发论文/最新新闻热点事件2022
  • 网络运营方案怎么写/谷歌推广优化
  • 恢复性测试:定义、重要性及实施方法
  • Claude Code 已支持【团队版】和【企业版】订阅
  • 用 Python 写的自动化测试 WPF 程序的一个案例
  • 牛客:链表分割算法详解
  • Android14内核调试 - boot vendor_boot
  • 沪深股指期货指数「IF000」期货行情怎么看?