小编aka*_*nuk的帖子

if(str1 == str2)与if(str1.length()== str2.length()&& str1 == str2)

我在另一个代码中看到了第二个,我想这个长度比较是为了提高代码生产率.它在解析器中用于具有特定字典的脚本语言:单词长度为4到24个字母,平均为7-8个字母,字母表包括26个拉丁字母加上"@","$"和"_".

长度比较用于转义==运算符使用STL字符串,这显然需要比简单整数比较更多的时间.但同时在给定字典中的第一个字母分布仅比字大小的分布宽,因此比较字符串的两个第一个字母通常通常不同于该字符串的大小.这使长度比较变得不必要.

我已经运行了一些测试,这就是我发现的:测试两个随机字符串比较百万次,第二种方式更快,所以长度比较似乎是有帮助的.但是在一个工作项目中,它在调试模式下运行速度更慢,在发布模式下运行速度更快.

所以,我的问题是:为什么长度比较可以加强比较,为什么它可以减缓它?

UPD:我也不喜欢那种第二种方式,但我认为这是有原因的,我想知道,这是什么原因.

UPD2:说真的,问题不在于如何做到最好.在这种情况下,我甚至不再使用STL字符串了.毫无疑问,长度比较是不必要的和错误的等等.奇迹是 - 它确实在某个特定测试中稍微好一些.这怎么可能?

c++ performance stl stdstring

2
推荐指数
3
解决办法
3138
查看次数

如何在本地抑制#define?

刚抓到一个愚蠢的小虫.我有一个带有CreateFile()功能的zip处理库.Winbase.h,包括在我的标题深处的某个地方,重新定义它CreateFileW,链接器疯了.

当然,我会winbase在这个特殊情况下排除.它不应该在第一位的范围内.但理论问题仍然很有趣,

有没有办法在本地压制一些定义?

c++ c-preprocessor

1
推荐指数
1
解决办法
362
查看次数

如何在Common Lisp中遍历列表和范围?

例如,要在某个点计算多项式,我必须遍历其系数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.

loops common-lisp

1
推荐指数
1
解决办法
310
查看次数

如何防止从我的模块导入功能?

我正在寻找private属性工作,而不是类成员,而是模块实体.函数,类,枚举器等

例如,在二郎有一个出口属性,它是这样的:-export([fun1, fun2])只有意fun1和fun2的模块中的所有功能,将出口.在D中,一切似乎都是默认导出的,这没关系,但有没有办法防止特定的东西呢?

module d

1
推荐指数
1
解决办法
80
查看次数

标签 统计

c++ ×2

c-preprocessor ×1

common-lisp ×1

d ×1

loops ×1

module ×1

performance ×1

stdstring ×1

stl ×1