news 2026/4/19 2:12:20

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 后,后续数据的处理将一次都不会执行。这使得在很多实际应用场景中可以避免很多没必要的计算。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 2:12:17

Matlab双对数图实战:从基础绘制到高级定制

1. 双对数图基础入门 第一次接触双对数图时&#xff0c;我也被它那独特的坐标轴搞懵过。简单来说&#xff0c;双对数图就是在x轴和y轴上都采用对数刻度的图形表示方法。这种图表特别适合展示数据跨度极大的情况&#xff0c;比如从0.001到10000这样的范围。在Matlab中&#xff0…

作者头像 李华
网站建设 2026/4/19 2:11:18

编译器安全增强:内存安全与类型安全的静态检查

编译器安全增强&#xff1a;内存安全与类型安全的静态检查 在软件开发中&#xff0c;内存安全和类型安全是保障程序稳定性和安全性的核心问题。内存错误&#xff08;如缓冲区溢出、悬垂指针&#xff09;和类型错误&#xff08;如隐式类型转换、未定义行为&#xff09;常常导致…

作者头像 李华
网站建设 2026/4/19 2:04:51

告别手动升级:用HC32F072的IAP功能打造一个无线固件更新(OTA)系统

智能设备无线升级实战&#xff1a;基于HC32F072的OTA系统设计与实现 在物联网设备普及的今天&#xff0c;固件升级已成为产品生命周期管理的关键环节。想象一下&#xff0c;当数千台设备部署在全国各地&#xff0c;传统的手动升级方式不仅效率低下&#xff0c;还可能因操作失误…

作者头像 李华
网站建设 2026/4/19 2:02:36

从Netflix开源到行业标准:VMAF模型训练与自定义实战指南

从Netflix开源到行业标准&#xff1a;VMAF模型训练与自定义实战指南 在视频流媒体行业&#xff0c;内容质量评估一直是技术团队面临的核心挑战之一。Netflix开源的VMAF&#xff08;Video Multi-method Assessment Fusion&#xff09;工具已经成为业界广泛认可的视频质量评估标准…

作者头像 李华
网站建设 2026/4/19 2:02:21

玩转Simulink三相电源:用Table模式模拟电压暂降、波动等电能质量事件

玩转Simulink三相电源&#xff1a;用Table模式模拟电压暂降、波动等电能质量事件 在电力系统仿真领域&#xff0c;精确模拟真实电网中的电压扰动是评估设备抗干扰能力和研究电能质量问题的关键。Simulink中的Three-Phase Programmable Voltage Source模块&#xff0c;特别是其T…

作者头像 李华