小编Sam*_*sen的帖子

以恒定时间更新连续数字序列的平均值

如何在平均值中添加和减去数字而不必遍历整个列表?

这在许多情况下非常有用.例如,连续计算流中最后X个值的平均值,将两个平均值相加,并根据新用户投票更新评级.

iteration math performance average time-complexity

6
推荐指数
2
解决办法
4052
查看次数

在标头中声明结构使其成为全局结构

有三个文件:source1.c source2.c header.h

两个源文件包括标头.

这是标题的代码:

struct
{
    int a;
    int b
} x;
Run Code Online (Sandbox Code Playgroud)

现在发生的是结构变为全局,两个源文件现在共享名为x的结构.为什么会这样?

我知道如果你编写以下代码,它将产生两个全局变量.每个源文件一个.(他们不共享全局变量)

int x = 0;
Run Code Online (Sandbox Code Playgroud)

最后一段代码对我有意义,但我真的不理解结构的那一段.

编辑:
嗯这里的每个人都认为我应该得到链接器错误.我目前的代码是针对嵌入式系统(nxtOSEK).我稍后会尝试将其转换为常规C程序.

EDITEDIT:
我回来了常规C中的例子.正如你所看到的那样,不仅可以使用结构,还可以使用常规变量.

source1.c

#include "header.h"

int main(void)
{
    f();
    x = 1;
    f();
}
Run Code Online (Sandbox Code Playgroud)

source2.c

#include "header.h"

void f()
{
    printf("source2: %i\n", x);
}
Run Code Online (Sandbox Code Playgroud)

header.h

#include <stdio.h>

int x;
Run Code Online (Sandbox Code Playgroud)

产量

source2: 0
source2: 1
Run Code Online (Sandbox Code Playgroud)

请注意,不得声明x使其工作,否则会产生链接器错误,就像这里所说的每个人一样.(我不知道为什么它与嵌入式系统一起工作..)

看起来我也误读了Eric Postpischil的答案看起来是正确的.

c struct global header

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

返回与作为参数传递的lambda表达式相同的类型

我想创建一个接受函数指针和lambda表达式的函数.函数的返回类型应与函数指针/ lambda表达式的返回类型相同.

以下是一个函数的最小示例,该函数按预期工作,但仅适用于函数指针.我也可以使用模板来接受lambda表达式吗?

template <typename R>
R foo(R (*func)())
{
    return func();
}
Run Code Online (Sandbox Code Playgroud)

以下适用于函数指针和lambda表达式,但只接受bool.

bool foo(std::function<bool()> func)
{
    return func();
}

bool a = foo( [](){ return true; } );
Run Code Online (Sandbox Code Playgroud)

我尝试使用模板使它变得通用,但是当它被调用时我得到一个编译器错误(没有匹配的函数)

template <typename R>
R foo(std::function<R()> func)
{
    return func();
}

bool a = foo( [](){ return true; } );
Run Code Online (Sandbox Code Playgroud)

c++ lambda templates c++11

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