Tag: 编程
电话亭里的 C++:一个旧时代的回声 当电话亭变成图书馆,当编程变成提示词 那些电话亭里的编程书,和即将远去的手写代码 从一英镑电话到 AI 编程:时代真的变了 古法编程:从 C++ 入门书说起 那天和家人散步,路过一个被改造成社区图书馆的英国电话亭,里面竟然放着 HTML 和 C++ 编程书。电话亭曾经承载着昂贵而珍贵的通信记忆,如今成了知识共享的小角落。而随着 AI 和大语言模型的发展,手写代码也许终将像电话亭和算盘一样,成为一个时代的回声。 古法编程: 村里有C++/HTML程序员 那天,我和家人一起散步,来回走了 5 公里。回村里的路上,我注意到一个废弃改造后的电话亭,里面放了很多书,其中竟然还有 HTML 和 C++ 的编程书。 这种路边的红色电话亭算是英国的一大特色,已经有二三十年的历史了。如今,随着手机、互联网和 5G 通信的发展,大部分电话亭早已停止使用。人与人之间的联系变得越来越方便,也越来越便宜。 …
竞赛选手几乎都会写的两行 C++ 代码 在刷算法题、打竞赛的人里,几乎都能看到 main() 里先写这两行: int main() { ios::sync_with_stdio(false); cin.tie(nullptr); } 很多新手会觉得像“祖传模板”,但它们确实能在 IO 很重的题里显著提速。原因主要有两个:同步和自动刷新。 1) 为什么 ios::sync_with_stdio(false) 能加速? C++ 常用输入输出是 cin / cout。默认情况下,它们会和 C 的 scanf / printf …
C++ 一直在不断增加新特性,以便程序员能够区分在编译时运行的代码和在运行时执行的代码。其中两个重要工具是函数 std::is_constant_evaluated()(C++20)和语言级别的 if consteval(C++23)。本文将解释这两者,展示实际示例,比较它们的保证和权衡,并建议在何时使用各自的方法。 这两种技术都允许你编写分支,根据当前的求值是在常量求值(编译时)上下文中还是运行时上下文中而表现不同。差异虽然细微,但非常重要:一个是返回布尔值的函数,另一个是编译器视为仅在编译时检查的特殊 if 语句,编译器会进行特殊处理。 std::is_constant_evaluated() (C++20) 这是一个在 <type_traits> 中声明的函数: #include <type_traits> constexpr bool std::is_constant_evaluated() noexcept; 当当前表达式在常量表达式(编译时)上下文中求值时,该函数返回 true,否则返回 false。 示例: #include <iostream> #include <type_traits> constexpr int …
Python 基础排序算法:基数排序详解与示例 Python Radix Sort 教程:整数、负数和浮点数排序 Python 数字排序指南:从整数到浮点的基数排序实现 高效排序算法讲解:Python 中的基数排序应用 Python 排序算法全解析:Radix Sort 的用法与实例 Python 基数排序简介 基数排序是一种非比较型排序算法,它通过按位对数字进行排序来完成排序。与直接比较整个数字(如快速排序或归并排序)不同,基数排序将元素根据其数字或字符分配到“桶”中,然后逐位处理。 对于整数,基数排序通常从最低有效位(LSD)到最高有效位(MSD)进行排序。这样可以保证稳定性,在处理完所有位后得到有序数组。 — 基数排序的工作原理 找到数组中的最大值,以确定需要处理的位数。 对每一位(个位、十位、百位等)使用稳定排序(如计数排序)。 重复此过程直到处理完所有位。 示例:对数组 进行排序: 按个位排序 → 按十位排序 → …
有序数据结构在编程中(尤其是算法竞赛和竞技编程)非常实用。在 Python 中,主要由 Sorted Containers 库提供三种有序数据结构:SortedDict、SortedSet 和 SortedList。 深入理解 Python 有序数据结构:从内置到 SortedContainers Python 有序数据结构完整指南 Python 中的有序列表、字典与集合实战解析 带你玩转 Python SortedContainers 与内置排序结构 Python 开发者必读:SortedContainers 与内置数据结构对比 Python 有序数据结构教程 排序是编程中最常见的操作之一。Python 提供了多种方式来维护有序数据,从内置的列表、集合、堆,到第三方库 sortedcontainers。 本教程将介绍 …
我上一次教我媳妇编程,大概是两年多前了。后来因为工作太忙,再加上一些其它原因,就停下来了。其实她对编程也不是很感兴趣,反倒更喜欢用 Excel,因为她工作中经常会用到。 上周刚好有点空闲时间,我又教她写了一个反转链表的题目。这个题我前阵子刚教过我儿子,觉得既适合用来面试,也很适合用作编程启蒙。 不过整个过程下来,她一直显得很迷茫。我也不确定是不是我讲得不好。还记得以前有网友留言调侃:“课讲得很一般,不过媳妇还挺好看的。” 说到底,编程不能只停留在理论层面。如果只是单方面学习、平时又缺乏实践的话,不仅学得不深入,而且很容易就忘了。学编程最好的方法就是敲代码。 我挺喜欢“输出型”的事情,像教娃、教媳妇这种,既能复盘知识,又特别解压。之前有网友留言:“你能教媳妇编程还不被她一顿骂,已经很成功了,这可是站在作死边缘反复横跳啊。” 网友说:“难度太大了 赖总 可以换换思路 教教好玩的 比如说图形化编程 或者ai做游戏 或者ai做视频 音乐啥的 女生喜欢这些 生动形象好玩有趣的 算法感觉也只能教教喜欢动脑子和喜欢挑战的小孩子 或者要打比赛,找工作种种需求的,不然这个玩意没人想碰,太无聊了。” 网友还说:“对夫妻感情那么有信心吗?就不能教点别的吗?” 网友又说:“人家是靠颜值吃饭的,你非得逼着学编程,哈哈哈” 本文一共 534 个汉字, 你数一下对不对. 时隔两年, 重新教媳妇编程, 不过她好像全忘光了. (AMP 移动加速版本) …
C++ 中的 dynamic_cast 是什么? 用途 在运行时在多态类型之间安全地进行转换 通常用于将基类指针转换为派生类指针(向下转型) 使用 RTTI(运行时类型识别)进行类型检查 基本语法 Derived* d = dynamic_cast<Derived*>(basePtr); 如果 basePtr 实际指向一个 Derived 对象,则转换成功 否则,返回 nullptr 转换失败的情况 指针转换: 如果实际对象不是目标类型,则返回 nullptr 引用转换: 如果失败,会抛出 std::bad_cast 异常 …