网站建设参考网站的说明书潍坊市住房和城乡建设局网站下载

张小明 2026/1/16 5:34:22
网站建设参考网站的说明书,潍坊市住房和城乡建设局网站下载,php服装商城网站建设,外贸入门基本知识一、透明操作符和透明哈希 在C14引入了透明操作符#xff0c;而C20中又引入了透明哈希。它们有一个共同的特征#xff0c;就是透明。那么它们之间有没有什么联系呢#xff1f;为什么又引入一个透明哈希呢#xff1f;一个问题紧跟着一个问题。那咱们就从根儿上盘一盘#x…一、透明操作符和透明哈希在C14引入了透明操作符而C20中又引入了透明哈希。它们有一个共同的特征就是透明。那么它们之间有没有什么联系呢为什么又引入一个透明哈希呢一个问题紧跟着一个问题。那咱们就从根儿上盘一盘把它们的来龙去脉分析一下。这样就更容易理解透明这个概念以及透明操作符和透明哈希的关系。二、透明操作符简单说明透明操作符的本质就是支持异构透明的数据操作当然必须是库支持的。由于这种异构的支持会避免临时对象的创建也就提高了容器操作的性能。透明操作符针对的是关联容器的特定操作在库提供的透明类型中均定义了T::is_transparent标识符nested type来表示其是透明类型。其它更详细的可以看一下前面的“透明操作符”相关文章。透明操作符最明显的就是让开发者可以不用再显式的定义类型从而降低编程的复杂度再加上临时对象的消除对性能的提高还是比较明显的。三、透明哈希透明操作符是针对有序容器中异构数据操作提供的一种实现。但在STL中还有无序容器呢而无序容器中很重要的一个操作就是哈希所以C20中就把“黑手”伸向了无序容器中的哈希操作也就是要分析的透明哈希。在STL中std::unordered_set和std::unordered_map等无序容器中在查找和定位时使用哈希函数可以同样使用类似于透明操作符的方式这样在保持与C14兼容的情况下可以达到类似的效果。不过比较麻烦一些的是C20中的透明哈希需要自定义哈希函数。这样说可能大家不好理解举一个例子在std::unordered_map中虽然其查找的时间复杂度是O(1)。但是如果想通过一个C类型的字符串const char*或std::string_view类型的变量来查找以std::string类型为KEY的元素时标准库会先创建一个临时的std::string对象然后再查找。这也意味着虽然查找的本身的动作并没有发生变化但在准备阶段却进行了意外的对象创建动作。而这也是C14中透明操作符解决的问题所以也就可以顺理成章的引入过来然后把这个问题解决掉。不过这一引入就到了C20标准了。那么为什么在引入这种透明操作之前C必须创建一个临时对象呢其实非常好理解在C这种强类型语言中为了函数操作安全必须确保操作类型的完全一致当然也包括隐式的转换。这在C中叫做“Homogeneous Lookup”即同质查找。而在C20中的无序容器中为了实现透明哈希提供了两种基础的透明操作透明哈希器一个标准的透明哈希器需要定义is_transparent标识符同时需要提供一个operator()数据类型转换操作符它需要支持完全一致的数据类型及可匹配的相关数据类型的参数。这样就可以计算出完全相同的哈希值KEY。类似于下面的代码structTransparentStr2Hash{using is_transparentvoid;//透明标识符// std::stringsize_toperator()(conststd::stringkey)const{returnstd::hashstd::string{}(key);}// std::string_viewsize_toperator()(std::string_view key)const{// C17:std::hashstd::string_viewreturnstd::hashstd::string_view{}(key);}// const char*size_toperator()(constchar*key)const{returnstd::hashstd::string_view{}(key);}};透明比较器透明比较器与透明哈希器的处理方式一致辞也需要要提供上面两种行为。不过对透明比较器来说有一个优势在C14中提供的透明操作符中提供了std::equal_to这个透明操作符。至此在标准库中通过透明机制的操作为开发者提供了更安全高效的API接口。四、例程下面看一下这两个函数的具体的例程#includeiostream#includestring#includeunordered_mapstructTransparentStr2Hash{using is_transparentvoid;//透明标识符// std::stringsize_toperator()(conststd::stringkey)const{returnstd::hashstd::string{}(key);}// std::string_viewsize_toperator()(std::string_view key)const{// C17:std::hashstd::string_viewreturnstd::hashstd::string_view{}(key);}// const char*size_toperator()(constchar*key)const{returnstd::hashstd::string_view{}(key);}};intmain(){std::unordered_mapstd::string,int,TransparentStr2Hash,std::equal_toexample{{one,1},{two,2},{three,3}};autoitexample.find(two);//const char*,C20前需要创建临时string对象if(it!example.end()){std::coutFound (*it).second\n;}else{std::coutNot found\n;}return0;}代码只是一个展示主要是说明C20标准前的问题。如果大家的环境支持C20那么可以在“operator()(const char *key)”中下一个断点如果用C20调试则断点可以中断如果用C17则断点就不会中断了。这也证明了C20支持了透明哈希。五、总结从本文的分析来看可以很清楚的理解C标准演进的一种思路。新技术的引进和实践是一步一步的进行的而不是翻天覆地的革命。其实也很好理解毕竟标准库已经是一个庞大而稳定的系统所以其改进必须基于稳妥的前提进行。在连续几个标准中把相类似的技术引入就是一种非常安全的思路。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

宁波有哪家公司做网站的网络广告营销实现方式解读

一、网络通信的基础框架:OSI 与 TCP/IP 协议栈 要理解 UDP 的定位,首先要明确它在网络通信体系中的层级 —— 这是所有网络编程的底层逻辑。 1. OSI 七层模型(通用理论框架) OSI 模型将网络功能划分为 7 层,每层负责…

张小明 2026/1/13 3:38:33 网站建设

信息流网站建设wordpress非插件oss

在三星设备的使用过程中,固件管理往往是让用户头疼的问题。传统方式需要记忆复杂的命令行参数,在不同平台间切换时更是困难重重。现在,有了Bifrost工具,这一切都变得简单直观。这款跨平台应用彻底改变了三星固件的管理方式&#x…

张小明 2026/1/16 1:54:28 网站建设

马鞍山做公司网站的wordpress 只剩纯文本

JavaScript调用Python后端API运行DDColor模型实现网页端老照片修复 在家庭相册的角落里,一张泛黄的老照片静静地躺在抽屉中——那是祖父年轻时站在老屋前的身影。如今,我们不再需要依赖专业修图师或复杂的图像软件来唤醒这段记忆。只需打开浏览器&#x…

张小明 2026/1/11 13:36:37 网站建设

怎样通过阿里巴巴网站开发客户网站开发外键

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/10 12:06:12 网站建设

连接外国的网站吗免费网站备

第一章:C#集合操作革命:展开运算符的崛起C# 12 引入了展开运算符(Spread Operator),标志着集合操作的一次重大进化。这一特性允许开发者使用简洁的语法将可枚举对象“展开”到另一个集合中,极大提升了代码的…

张小明 2026/1/10 12:06:14 网站建设