我正在通过 C++ 中的替换来编写经典密码,使用 ASCII 中的所有可打印字符,我想知道哪个更快?在数组中搜索( 编辑: 一个非关联的,就像 letters[] = {'a', 'b', ...); (线性或二进制)或 switch 语句一样?编译器可以优化 switch,不是吗?。也许区别在于内存使用情况?我的选择是开关,虽然代码比较大,但也许我遗漏了一些东西。

(也许这个问题看起来很主观,但我认为选择一种或另一种方式是客观原因。对不起我的英语)。

最佳答案

一个足够聪明的编译器肯定有可能将开关优化为查找,这比二分查找要快。但是您可以自己进行优化并获得短代码:

char alphabet[] = {
    'Z', 'E', 'B', 'R', 'A', 'S', 'C', 'D', 'F', 'G', 'H', 'I', 'J',
    'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'T', 'U', 'V', 'W', 'X', 'Y'
};
// now you can get the ciphertext for a single uppercase character with:
alphabet[ch - 'A'];

关于c++ - 在数组中搜索或切换?对于替换密码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6237300/

10-10 13:18