1.js-sdsl - 参考 C++ 实现的 javscript 标准数据结构库
2.该死!Github上这些C++项目真香
3.[stl 源码分析] std::list::size 时间复杂度
4.科学可视化软件介绍 – 桌面版3D文件查看器F3D
5.如何系统地学习 C/C++ 语言有哪些C++开源项目可以学习呢?
js-sdsl - 参考 C++ 实现的 javscript 标准数据结构库
一款参考C++ STL的JavaScript标准数据结构库——js-sdsl,正式推出4.0.0-beta.0版本。欢迎通过GitHub链接或npm包名探索库的使用。
内含RB-tree实现的Set、Map及哈希表等数据结构,如何找到源码首页拥有全面的单元测试、性能测试及API文档。支持CommonJS和ES modules,兼容浏览器script标签引入。采用typescript编写,具备严谨类型推导,开发效率显著提升。
寻求贡献或发现漏洞?欢迎提交merge请求或联系开发者,贡献者信息将展示在首页。中文README文档提供详细指南。
支持直接下载或通过npm安装。API文档提供使用指导。浏览器中使用可从源码构建库,通过运行yarn build。正确性校验与性能测试覆盖全面,测试结果可在测试覆盖率文件或通过特定命令获取。库采用MIT许可。
该死!系统正版源码Github上这些C++项目真香
在探索GitHub上寻找学习资源时,很多人可能会遇到大型且复杂项目,这些往往对初学者来说难以理解。但实际上,GitHub上不仅有大型项目,还有许多适合不同学习阶段的资源。以下整理了一些从入门到实战的C++项目,供学习者参考。
首先,CPlusPlusThings 是一个全面的C++学习项目。它将学习内容分为基础、进阶、实战、新特性、设计模式、STL源码、并发编程、惯用法等多个部分。虽然在注释部分有些不尽人意,对新手友好度一般,但其系统性较强。通过天实战,可帮助学习者掌握语法和函数应用。云传源码
C-Plus-Plus 是一个收集了大量C++算法的集合,涵盖了计算机科学、数学、数据科学等领域,适合对算法有深入需求的学习者。通过对比多个实现,了解不同策略和优化方法。
CppTemplateTutorial 是一个中文的C++模板教学指南,旨在帮助读者理解模板语言。适合熟悉基本语法、STL及递归等编程方法的学习者。项目章节深入浅出,但遗憾的是,部分章节尚未完成。
MyTinySTL 是一个小型STL库项目,适合C++新手练习。它用C++重写了小型的容器库和算法库,代码结构清晰,带中文文档和测试框架,是学习实践的好选择。
Tinytetris 是一个终端版俄罗斯方块游戏,分为注释版和库版,适合对游戏编程感兴趣的uclinux源码分析初学者。通过此项目,可以学习基本的C++编程技巧。
计算器项目由微软开源,提供了标准、科学、程序员计算器功能,以及度量单位和货币转换功能。学习微软工程师编写的代码,有助于提高阅读源码的能力。
EliteQuant Cpp 是一个基于C/C++ 的多线程并发式高频交易平台,遵循现代设计模式,适合对高频交易有深入需求的学习者。它可独立运行,也作为其他项目的服务器端。
Seafile 是一个开源云存储平台,提供文件集中存储、共享、跨平台访问等功能。它具有强大的云同步功能,适合需要集中存储、共享文件的学习者。
Hikyuu Quant Framework 是一个基于C++/Python的开源量化交易研究框架,适合对量化交易感兴趣的linux htb 源码学习者。它提供了策略分析、回测等功能,帮助理解系统化交易。
ApolloAuto 是一个开源自动驾驶平台,适合对自动驾驶领域感兴趣的高级学习者。它包含定位、感知、车辆规划、运营等多个模块,涉及AI和大数据技术。
这些资源覆盖了从基础到高级的C++学习阶段,适合不同层次的学习需求。通过系统学习和实践,可以提高C++编程技能。如果有更优秀的项目推荐,欢迎在评论区分享,一起学习进步。
[stl 源码分析] std::list::size 时间复杂度
在对Linux上C++项目进行性能压测时,一个意外的发现是std::list::size方法的时间复杂度并非预期的高效。原来,这个接口在较低版本的g++(如4.8.2)中是通过循环遍历整个列表来计算大小的,这导致了明显的性能瓶颈。@NagiS的提示揭示了这个问题可能与g++版本有关。
在功能测试阶段,CPU负载始终居高不下,通过火焰图分析,std::list::size的调用占据了大部分执行时间。火焰图的使用帮助我们深入了解了这一问题。
查阅相关测试源码(源自cplusplus.com),在较低版本的g++中,std::list通过逐个节点遍历来获取列表长度,这种操作无疑增加了时间复杂度。然而,对于更新的g++版本(如9),如_glibcxx_USE_CXX_ABI宏启用后,list的实现进行了优化。它不再依赖遍历,而是利用成员变量_M_size直接存储列表大小,从而将获取大小的时间复杂度提升到了[公式],显著提高了性能。具体实现细节可在github上找到,如在/usr/include/c++/9/bits/目录下的代码。
科学可视化软件介绍 – 桌面版3D文件查看器F3D
F3D是一款桌面版3D文件查看器,功能强大,支持多种文件格式,如glTF、USD、STL、STEP等。F3D能显示动画,提供渲染和纹理选项,包括实时物理渲染和光线跟踪。它包含libf3d库,可用于渲染Mesh网格,支持C++和Python调用。F3D为Windows、Linux、MacOS提供独立安装程序,有Python 3.8至3.的whl文件可供下载,非常贴心。F3D官网和源代码在github上,首次发布于年月。自发布以来,已获得社区良好反馈,两年间吸引了全球多位贡献者,更新速度较快,最新版本为年1月的2.3.0版。下面是使用F3D制作的可视化图形示例。此外,F3D在开源社区中提供了丰富的参考资料和一系列文章,覆盖了多种科学可视化软件的介绍。如果您对F3D感兴趣,不妨一试。
如何系统地学习 C/C++ 语言有哪些C++开源项目可以学习呢?
开源项目是学习编程语言,特别是像C++这样的语言,非常有效且快速的方式。得益于像GitHub这样的平台,我们可以访问到大量优质的开源项目,从中学习到顶级程序员的编码习惯、探索程序设计模式,并从中获取灵感,以实际操作项目,将理论知识与实践相结合,加速提升技能。
例如,一个适合初学者的项目是关于C++技术面试的基础知识总结,它涵盖了语言、程序库、数据结构、算法、系统、网络、链接装载库等知识,为初学者提供了面试过程中可能遇到的C++相关问题和解答,这些知识比书本上更贴近实际项目。
另一个简单的项目是俄罗斯方块(Tiny Tetris),它通过使用C++实现游戏,帮助初学者将C++与熟悉的游戏开发结合起来,增强学习的直观性与参与感。通过解决如何实现方块图像、移动和选择、消除和积分功能等问题,初学者能更好地理解C++在游戏开发中的应用。
MyTinySTL项目则专注于C++的STL(标准模板库),它通过一系列代码示例和详细注释,帮助初学者理解STL的用法,对于刚掌握基础知识,想要深化理解的同学尤为有益。
随着技能的提升,可以尝试Cytopia(一个复古像素艺术城市建设游戏)、OpenTTD(一款运输模拟游戏)、devilutionX(《暗黑破坏神》和《地狱之火》源码移植)、Calculator(Windows计算器程序)、DearPyGui(适用于Python的快速且强大的图形用户界面工具包)、Clementine(音乐播放器和资料库组织工具)和zeal(离线文档浏览和阅读工具)等项目。这些项目覆盖了从游戏开发、用户界面设计、文件处理到文档管理等多个领域,适合不同水平的学习者深入探索。
总之,通过参与这些开源项目,初学者可以脱离书本理论,将学习内容与实际项目结合,不断提升编程技能。对于寻求更多资源和支持的学习者,可以加入专门的粉丝群,获取学习视频、源码、项目实战资料,并在群内与同行交流,共同成长。抓住每一次学习机会,利用有限的时光,加速提升编程技能。无论是零基础还是寻求进阶,开源项目都是宝贵的学习资源。