【发布时间】:2012-11-29 05:20:30
【问题描述】:
我想实现一个哈希或类似 PHP 的数组。哪个更好,选项 a) 或选项 b) 通过键查找元素?
(所有变量都被设置和初始化等等!)
一)
for( i = 0; i < ary->element_cnt && found == NULL; i++ ) {
current_element = &(ary->elements[i]);
if( 0 == memcmp(current_element->key, search_key, keysize) ) {
found = current_element;
}
}
b)
for( i = 0, current_element = &(ary->elements[i]) ;
i < ary->element_cnt &&
0 != memcmp(current_element->key, searchkey, keysize);
i++, current_element = &(ary->elements[i]) );
/*found = current_element;*/
第一个更好,因为它更具可读性/可维护性?第二个会更快吗?
在一个大循环中做所有事情是“坏风格”吗?
我知道,那里有更好的搜索算法,但这不是我的问题!
【问题讨论】:
-
第二个真的会更快吗?检查生成的代码并先进行一些分析,然后再牺牲可读性以进行一些感知优化。
-
已编辑问题。我不知道!我的措辞不如应有的好。
-
这主要是品味问题。在性能方面,大部分时间将花在进入/退出
memcmp,所以如果这占总时间的很大一部分,我会尝试以不同的方式来做。我经常做for (i = n; --i>=0;) if (test(i)) break;所以i是找到的元素,除非它是负数。 -
first 更好,因为它更容易阅读
-
作为一个挑剔的嵌入式小伙子,更快的是:i = ary->element_cnt;而(i--) ...
标签: c arrays algorithm search coding-style