我想实现一个Hash或类似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;
}
}
Run Code Online (Sandbox Code Playgroud)
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;*/
Run Code Online (Sandbox Code Playgroud)
第一个更好,因为它更易读/可维护吗?第二个会更快吗?
在一个大循环中做所有事情是"糟糕的风格"吗?
我知道,那里有更好的搜索算法,但这不是我的问题!
设置简单:功能和功能实现有n个原型。函数指针有一大堆。每个函数都列在此数组中。使用gcc进行编译时,某些仍然会导致-Wunused函数。
码:
void foo1(void);
void foo2(void);
void bar1(void);
void bar2(void);
/* and their implementations */
void (*functions[])(void) = { foo1, foo2, bar1, bar2 };
Run Code Online (Sandbox Code Playgroud)
这就是设置的样子(只是一个例子)!现在,使用gcc编译时,其中一个foo / bar函数会导致-Wunused函数警告。其他人没有。为什么?
目前正在尝试学习D编程语言.
写了这个小快速算法算法,它在运行示例时返回OutOfMemoryError.
import std.stdio;
import std.algorithm;
int[] qs(int[] ary)
{
if(ary.length <= 1)
{
return ary;
}
int pivot_pos = 0;
int pivot = ary[pivot_pos];
for(int i = 0; i < ary.length; i++)
{
if(ary[i] < pivot)
{
ary = ary.remove(i) ~ ary;
pivot_pos++;
}
else
{
ary ~= ary.remove(i);
if(i < pivot_pos)
pivot_pos--;
}
}
return qs(ary[0..pivot_pos]) ~ qs(ary[(pivot_pos+1)..ary.length]);
}
int main()
{
int[] ary = [ 2, 1, 4, 1, 6, 78, 3, 5, 10, 129, 234, 3, …Run Code Online (Sandbox Code Playgroud) 是否有可能在C创建的模板++(11),用于一个函数来检查对象是否包含在任何一个std::vector,std::array或std::list(以及可能甚至更多的容器类型)?
我现在有什么:
typedef std::shared_ptr<Tag> SharedTag;
typedef std::vector<SharedTag> TagList;
bool
Tag::isIn(const TagList& lst) {
return std::any_of(lst.begin(), lst.end(), [this](const SharedTag& t) {
return t->name == this->name;
});
}
Run Code Online (Sandbox Code Playgroud)
Tag是正常的class.当然,应该进行比较,t == this这将是operator==后来的比较.为简单起见,我没有在此处包含此内容.
那么,是不是可以写上代码只有一次(不包括的typedef的虽然)为std::vector,std::array,std::list(,也许对std::set)等?
我找不到所有这些类的基类型......这将是我的第一个想法......
我写了一个链表列表,用于教育自己写C和做一些与我的信息技术学习有关的东西.我发现,由于sizeof(double)被解析为0为4.9,因此出现了一些可怕的错误:
double ary[] = { 1.0, 2.0, 3.5, 4.9, 5.5 };
LinkedList *list = linkedlist(&ary[0], sizeof(ary[0]));
for( i = 1; i<len(ary); i++ )
ll_push(list, &ary[i], sizeof(double) );
Run Code Online (Sandbox Code Playgroud)
对于1.0,2.0和3.5来说一切都很好,但对于4.9来说它很糟糕.以前,我在代码中有sizeof(ary [i]),但现在sizeof(double)的结果相同.
我真的很不高兴.任何人都可以解释,为什么会这样?