[原创](ModernC++)现代C++的关键性概念:妙用std::reference_wrapper,让std
- 创业
- 2025-08-28 23:15:02
现代C++的关键性概念:妙用std::reference_wrapper,让std](/0pic/pp_40.jpg)
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder 技能种类: 逆向 驱动 磁盘 文件 研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全 项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测
[序言] 在C++11及之后的标准中, 带来了许多全新的工具和概念, 使得编程风格更为灵活和高效. 其中std::reference_wrapper便是一个非常有用的工具, 它允许以引用的方式包装对象, 并将其存储在容器中. 传统的std::list虽然在插入和删除操作上表现出色, 但由于其底层实现是链表结构, 因此并不支持随机访问. 这在某些需要快速下标访问的场景中会成为限制. 但可以使用一种巧妙的技术: 将std::list中的元素通过std::reference_wrapper映射到std::vector中, 从而获得随机访问的能力, 同时保持原始数据的同步更新. 这种方法不仅避免了数据的冗余拷贝, 还能充分利用现代C++的特性, 让代码更加简洁高效.
[代码演示]
int main() { // 主要演示: 将std::list中的元素通过std::reference_wrapper映射到std::vector中, // 从而实现对std::list元素的随机访问, 并保证对vector的修改能够同步反映到list上. // 定义一个存储随机整数的std::list容器 std::list<int> list_RandomNum{ 1, 10, 8, 2, 3, 4, 9, 7, 6, 5 }; // 通过std::reference_wrapper<int>方式, 将std::list容器中的每个元素引用存入std::vector容器中 // 相当于构建了一个对std::list元素的“映射”, 从而实现随机访问 std::vector<std::reference_wrapper<int>> vector_FromList(list_RandomNum.begin(), list_RandomNum.end()); // 方法1: 直接通过调用get()函数来获取引用, 修改映射后的vector中第2个元素的值 vector_FromList[1].get() = 20; // 方法2: 利用std::reference_wrapper的隐式转换特性, 将其转换为int&, 并修改第3个元素的值 int& int_Ref = vector_FromList[2]; int_Ref = 30; return 0; }[代码说明] * 使用std::reference_wrapper: 通过构造std::vector时使用std::reference_wrapper, 可以将std::list中的每个元素引用到std::vector中. 这样做的好处是, 不用复制数据, std::vector中的元素直接引用了std::list中的元素
* 修改操作: 方法1: 直接通过get()方法获取引用, 然后修改这个引用所指向的值. 这会直接影响到原始的std::list中的元素. 方法2: 通过隐式转换将std::reference_wrapper转换为int&,然后直接操作这个引用. 同样, 这也会影响到std::list中的元素. [总结] 利用现代C++特性std::reference_wrapper解决传统容器局限性的, 让将std::list中的元素映射到std::vector中, 从而实现随机访问. 这种方法的优点主要包括:
* 高效性: 无需复制元素, std::vector中仅保存对list中数据的引用, 节省内存和时间开销. * 同步更新: 对std::vector中引用的任何修改都会即时反映到原始的std::list中, 保证数据一致性. * 灵活性: 这种技术不仅可以用于std::list, 还可以扩展到其他不支持随机访问的容器, 为开发者提供更多的设计选择.
[原创](ModernC++)现代C++的关键性概念:妙用std::reference_wrapper,让std由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“[原创](ModernC++)现代C++的关键性概念:妙用std::reference_wrapper,让std”
上一篇
top命令输出内容详解