当我正在玩一个快速的教程时,我开始编写一个自定义isPrime
方法来检查给定Int
是否为素数.
在写完之后,我意识到它工作正常,但发现它isPrime
在某些相当大的数字上执行有点慢(当时仍然低得多Int.max
).
所以我在objc中编写了相同的代码片段,代码执行得更快(66倍).
这是快速代码:
class Swift {
class func isPrime(n:Int) -> Bool {
let sqr : Int = Int(sqrt(Double(n))) + 1
for i in 2...sqr {
if n % i == 0 {
return false
}
}
return true;
}
class func primesInRange(start:Int, end:Int) -> Int[] {
var primes:Int[] = Int[]()
for n in start...end {
if self.isPrime(n) {
primes.append(n)
}
}
return primes;
}
}
Run Code Online (Sandbox Code Playgroud)
和objc代码:
@implementation Utils
+ …
Run Code Online (Sandbox Code Playgroud) 我想知道为什么std::accumulate
(aka reduce)需要第三个参数.对于那些不知道是什么accumulate
的人,它是这样使用的:
vector<int> V{1,2,3};
int sum = accumulate(V.begin(), V.end(), 0);
// sum == 6
Run Code Online (Sandbox Code Playgroud)
来电accumulate
相当于:
sum = 0; // 0 - value of 3rd param
for (auto x : V) sum += x;
Run Code Online (Sandbox Code Playgroud)
还有可选的第4个参数,允许用任何其他操作替换添加.
我听过的理由是,如果你需要说不加,而是乘以向量的元素,我们需要其他(非零)初始值:
vector<int> V{1,2,3};
int product = accumulate(V.begin(), V.end(), 1, multiplies<int>());
Run Code Online (Sandbox Code Playgroud)
但是为什么不像Python一样 - 设置初始值V.begin()
,并使用范围从开始V.begin()+1
.像这样的东西:
int sum = accumulate(V.begin()+1, V.end(), V.begin());
Run Code Online (Sandbox Code Playgroud)
这适用于任何操作.为什么需要第三个参数?
我想抑制来自g ++的特定警告.我知道这面-Wno-XXX
旗帜,但我正在寻找更具体的东西.我想要一些警告-Weffc++
,但不是全部.像你可以用lint做的事情 - 禁用特定的消息.
在gcc中有内置的方法可以做到这一点吗?我是否必须编写包装脚本?
以前关于这个主题的答案似乎已经过时,所以我再次要求寻找更及时的信息.
我使用emacs开发源(24.0.50.1)来构建自己的emacs.是的,我喝了Kool-Aid.
我最近开始使用git克隆开发存储库和我自己的项目.我想在emacs中使用git,我只想学习一个界面.
似乎vc-git和magit是主要的选择.是对的吗?
如果我经常使用其他VC系统(我不这样做),看起来vc-git会是一种方法,而且magit是最合适的,因为我只打算使用git.
听起来不错吗?或者我错过了什么?
我试图在我的游戏中将3D阵列压平为1D阵列中的"块"系统.这是一个3D块游戏,基本上我希望块系统几乎与Minecraft的系统相同(但是,这不是Minecraft克隆的任何措施).在我以前的2D游戏中,我使用以下算法访问了扁平化数组:
Tiles[x + y * WIDTH]
Run Code Online (Sandbox Code Playgroud)
然而,这显然不适用于3D,因为它缺少Z轴.我不知道如何在3D空间中实现这种算法.宽度,高度和深度都是常量(宽度和高度一样大).
是x + y*WIDTH + Z*DEPTH
吗?我的数学非常糟糕,我只是开始进行3D编程,所以我很丢失:|
PS.这样做的原因是我循环并从索引中获取相当多的东西.我知道1D阵列比多维阵列更快(我记得的原因是:P).即使这可能没有必要,我希望尽可能好的表现:)
我正在使用PHP和MySQL建立一个站点,它本质上只是现有数据库的Web前端.可以理解的是,我的客户非常希望能够阻止任何人在数据库中复制数据,同时希望所有内容都公开,甚至"查看全部"链接以显示数据库中的每条记录.
虽然我已经采取了一切措施来防止诸如SQL注入攻击之类的攻击,但没有什么可以阻止任何人将所有记录都视为html并运行某种脚本来将这些数据解析回另一个数据库.即使我要删除"查看全部"链接,理论上仍然可以使用自动化过程逐个浏览每个记录并将这些记录编译到新数据库中,从根本上捏取所有信息.
有没有人有任何好的策略来防止甚至只是阻止它们可以分享.
我知道在Prolog中你可以做类似的事情
someFunction(List) :-
someOtherFunction(X, List)
doSomethingWith(X)
% and so on
Run Code Online (Sandbox Code Playgroud)
这不会迭代List中的每个元素; 相反,它将分支到不同的"机器" (通过使用多个线程,在单个线程上回溯,创建并行Universe或者你是什么),并为每个可能的X值执行单独的执行,导致someOtherFunction(X, List)
返回true!
(我不知道它是如何做到的,但这对问题并不重要)
我的问题是: 还有哪些其他非决定性编程语言? 似乎非确定性是在具有不可变变量的语言中实现多线程的简单化和最合乎逻辑的方式,但我以前从未见过这样做 - 为什么这种技术不再流行?
multithreading functional-programming prolog non-deterministic
我正在尝试编写一个小型命令启动器应用程序,并希望在我自己的完成系统中使用bash的选项卡完成.我已经能够获得一般命令的完成列表compgen -abck
.
但是,我还希望获得特定命令的完成:例如,输入git p
应显示git命令的完成.
我有什么方法可以compgen
用来做这个吗?如果没有,还有其他方法可以通过编程方式获得完成列表吗?
[编辑:澄清一点,我不是要为 bash 提供完成 - 我的应用程序是一个GUI命令启动器.我只想在我自己的应用程序中使用bash的现有完成.
在python 2.6中:
[x() for x in [lambda: m for m in [1,2,3]]]
Run Code Online (Sandbox Code Playgroud)
结果是:
[3, 3, 3]
Run Code Online (Sandbox Code Playgroud)
我希望输出为[1,2,3].即使使用非列表理解方法,我也会得到完全相同的问题.甚至在我将m复制到另一个变量之后.
我错过了什么?