小编mus*_*tze的帖子

循环数组,更好,更快等等?

我想实现一个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)

第一个更好,因为它更易读/可维护吗?第二个会更快吗?

在一个大循环中做所有事情是"糟糕的风格"吗?

我知道,那里有更好的搜索算法,但这不是我的问题!

c arrays algorithm search coding-style

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

是什么导致编译器警告未使用的功能?

设置简单:功能和功能实现有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函数警告。其他人没有。为什么?

c arrays prototype function-pointers gcc-warning

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

试图在D中编写Quicksort,得到OutOfMemoryError

目前正在尝试学习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)

algorithm d quicksort

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

(C++)用于检查对象是否在vector/array/list/...中的模板?

是否有可能在C创建的模板++(11),用于一个函数来检查对象是否包含在任何一个std::vector,std::arraystd::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++ arrays stl vector c++11

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

sizeof(double)是8次,另一次是0?

我写了一个链表列表,用于教育自己写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)

(线267-270在该试验中这个库)

对于1.0,2.0和3.5来说一切都很好,但对于4.9来说它很糟糕.以前,我在代码中有sizeof(ary [i]),但现在sizeof(double)的结果相同.

我真的很不高兴.任何人都可以解释,为什么会这样?

c debugging double linked-list sizeof

-2
推荐指数
1
解决办法
301
查看次数