var example = function () {
console.log(typeof this);
return this;
};
Run Code Online (Sandbox Code Playgroud)
在严格模式下: example.call('test') # prints 'string'
除此以外, example.call('test') # prints 'object'
但是,console.log(example.call('test'))打印test(正如您所期望的那样)
为什么Function.call变化typeof 'test' === 'string'局限于this内部example?
假设在某个时间点,您有一组N数字并知道中间元素:M.现在,您将获得一个新值,X因此您可能需要更新M.(或者更确切地说,您需要,假设您正在处理的数字都是唯一的.此外,所有样本都是连续接收的,因此并发性没有问题.)
计算新均值很简单:采用旧均值,加X,乘N,除N + 1.(通过检查N元素的平均值是如何定义的,这一点很清楚.目前我并不太担心数字.)
我的问题是:任何人都可以提出更新中位数的创意/小说(或者可能是可证明最优的)方法吗?我将在下面提供一个示例(我自己设计的简单概念),并进行一些分析:
在这个例子中,我将使用a std::forward_list,因为C++ 11是我最近遇到过的.在不失一般性的情况下,我将假设你以正确的方式进行此操作:维护到目前为止遇到的元素(类型T)的有序列表,std::forward_list<T> sorted;当 T x;出现时,只需使用以下方法将其折叠到位:
sorted.merge(std::forward_list<T> {{ x }});
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我很好奇是否有人有更好的(更有效/更优雅)的方法.欢迎Gripes.
所以,X现在是一部分sorted,简而言之,这就是我的想法:
auto it = sorted.begin(), itend = sorted.end();
typename std::forward_list<T>::size_type count = std::distance(it, itend);
for (const auto &e : sorted) {
if (it == itend || ++it == itend) {
M = (count % 2) ? e : (e + M) / …Run Code Online (Sandbox Code Playgroud) algorithm ×1
c++ ×1
call ×1
forward-list ×1
function ×1
javascript ×1
mean ×1
median ×1
strict ×1
strict-mode ×1