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

View的三大特性之一:迟绑定

上篇文章我们学习了View三大特性之轻量级,今天学习第二课:迟绑定

如你所知,迟绑定又有延迟计算,惰性处理等别称。具体是怎样的表现可以先看一下下面这段代码:

// 迟绑定 #include <algorithm> #include <iostream> #include <ranges> #include <vector> ​ int square(int x) { std::cout << x << " passes squared equals " << (x * x) << std::endl; return x * x; } ​ void test_std() { std::cout << __func__ << std::endl; std::vector<int> data = {1, 2, 3}; std::vector<int> ret; std::transform(data.begin(), data.end(), std::back_inserter(ret), square); std::cout << "after std::transform" << std::endl; for (auto&& x : ret) { std::cout << x << std::endl; } } ​ void test_views() { std::cout << __func__ << std::endl; std::vector<int> data = {1, 2, 3}; auto ret = std::ranges::views::transform(data, square); std::cout << "after std::ranges::views::transform" << std::endl; for (auto&& x : ret) { std::cout << x << std::endl; } } ​ int main() { test_std(); test_views(); }

输出结果为:

test_std 1 passes squared equals 1 2 passes squared equals 4 3 passes squared equals 9 after std::transform 1 4 9 test_views after std::ranges::views::transform 1 passes squared equals 1 1 2 passes squared equals 4 4 3 passes squared equals 9 9

我们发现在使用传统的 std::transform 会在函数执行时将所有数据进行立即的处理,因此当其获得返回值时,必然是进行一轮 O(n) 时间复杂度的处理。

而使用 views::transform 并获得返回值时,一次实际的 square() 都没有发生。直到我们在真正地进行数据处理(比如遍历数据)时才会一个一个地进行数据处理。这就是上文指的“延迟”计算。

这有一个极大的好处,比如当有时在循环时进行 break 后,后续数据的处理将一次都不会执行。这使得在很多实际应用场景中可以避免很多没必要的计算。

http://www.jsqmd.com/news/663647/

相关文章:

  • ArcGIS Pro影像分类精度上不去?试试这个‘面向对象+向导’的组合拳,效果立竿见影
  • 2026.4.18:使用docker compose安装极狐GitLab-ce
  • UnrealPakViewer技术解析:企业级UE4资源包分析架构深度评估
  • 利用豆包产生虚拟场景的测试
  • Midscene.js:打破视觉自动化测试壁垒,让AI成为你的跨平台测试专家
  • 从入门到精通:富斯MC6接收机的7种模式与实战应用指南
  • ViViD虚拟试衣:3个关键配置让扩散模型生成高质量换装视频
  • 如何将SQL查询结果转换为大写:UPPER与LOWER函数
  • Matlab双对数图实战:从基础绘制到高级定制
  • 别再用HAL_Delay()了!STM32 HAL库延时函数的3个致命坑与替代方案
  • 玩转LCD12864绘图与反白:手把手教你用ST7920驱动芯片实现自定义图标和特效显示
  • 走马观碑的图像识别
  • 从选型到调试:恩智浦NXP单片机开发环境CodeWarrior实战指南
  • 别再只用翻转和裁剪了!PyTorch实战:用CutMix和Mixup让你的ResNet50在CIFAR-10上再涨几个点
  • Unity UI交互进阶:给Slider加上拖拽开始/结束和点击事件监听(ExtendedSlider源码详解)
  • AI写代码却崩在npm install?(2024真实生产事故复盘:LLM生成代码的依赖链断裂真相)
  • ChampR:打破英雄联盟数据孤岛,构建智能化游戏决策助手
  • 成品车模不是洪水猛兽
  • Calibre豆瓣插件:智能获取图书元数据的终极解决方案
  • 打造你的私人数字书房:Uncle小说桌面阅读器完整指南
  • DeepPCB:工业级PCB缺陷检测数据集完整指南
  • 代码生成越快,回滚越痛?深度拆解3类高危生成模式,附GitHub Star 2.4k的开源回滚检测SDK配置手册
  • GitHub中文界面插件:3步解锁你的中文GitHub工作台
  • PHP 多维数组中按唯一 range 值映射为从 0 开始的连续序号
  • 2026年热门的数控车铣复合机床优质供应商推荐 - 行业平台推荐
  • 开源 | 储能管理系统(EMS)闭环 -慧知开源充电桩平台
  • 智能代码生成器版本演进全景图(2022–2024核心算法对比白皮书)
  • 手把手教你用Mindie在昇腾Atlas 200I A2上部署DeepSeek-R1模型(含完整配置文件详解)
  • 别再手动调色了!用MATLAB bar函数绘制多组堆叠柱状图的配色自动化技巧
  • Simulink仿真下的自适应巡航控制(ACC)系统建模:速度与间距控制策略探究