我在另一个代码中看到了第二个,我想这个长度比较是为了提高代码生产率.它在解析器中用于具有特定字典的脚本语言:单词长度为4到24个字母,平均为7-8个字母,字母表包括26个拉丁字母加上"@","$"和"_".
长度比较用于转义==运算符使用STL字符串,这显然需要比简单整数比较更多的时间.但同时在给定字典中的第一个字母分布仅比字大小的分布宽,因此比较字符串的两个第一个字母通常通常不同于该字符串的大小.这使长度比较变得不必要.
我已经运行了一些测试,这就是我发现的:测试两个随机字符串比较百万次,第二种方式更快,所以长度比较似乎是有帮助的.但是在一个工作项目中,它在调试模式下运行速度更慢,在发布模式下运行速度更快.
所以,我的问题是:为什么长度比较可以加强比较,为什么它可以减缓它?
UPD:我也不喜欢那种第二种方式,但我认为这是有原因的,我想知道,这是什么原因.
UPD2:说真的,问题不在于如何做到最好.在这种情况下,我甚至不再使用STL字符串了.毫无疑问,长度比较是不必要的和错误的等等.奇迹是 - 它确实在某个特定测试中稍微好一些.这怎么可能?
刚抓到一个愚蠢的小虫.我有一个带有CreateFile()功能的zip处理库.Winbase.h,包括在我的标题深处的某个地方,重新定义它CreateFileW,链接器疯了.
当然,我会winbase在这个特殊情况下排除.它不应该在第一位的范围内.但理论问题仍然很有趣,
有没有办法在本地压制一些定义?
例如,要在某个点计算多项式,我必须遍历其系数ai ? a0..an,将每个乘以参数幂i并将其求和.(我知道Horner的方法,只是无法提出更好的例子)当然我可以使用一些生成的序列的zip系数,并以某种方式通过这些对:
(loop for (ai, i)
in (apply #'list a (loop for i from 0 below (length a) collect i))
sum (* ai (expt x i)))
Run Code Online (Sandbox Code Playgroud)
但这似乎很麻烦.有没有办法将它组合在一个循环中?
编辑:mapcar不是apply.
我正在寻找private属性工作,而不是类成员,而是模块实体.函数,类,枚举器等
例如,在二郎有一个出口属性,它是这样的:-export([fun1, fun2])只有意fun1和fun2的模块中的所有功能,将出口.在D中,一切似乎都是默认导出的,这没关系,但有没有办法防止特定的东西呢?