此变量是否始终设置为包含CMakeLists.txt我运行的文件的目录cmake?
例如,如果我希望运行cmake在CMakeLists.txt当前目录上方的目录中的文件,我会去:cmake ...
在这种情况下,我的CMAKE_SOURCE_DIR设置为什么?
哪个更好?(为什么?)
if somevalue == False:
Run Code Online (Sandbox Code Playgroud)
要么
if somevalue is False:
Run Code Online (Sandbox Code Playgroud)
如果somevalue是字符串,你的答案会改变吗?
我目前正在阅读Skiena的"算法设计手册".
他描述了一种计算数字幂的算法,即计算a^n.
他首先说最简单的算法很简单a*a*a ... *a,所以我们总共进行了n-1计算.
然后他继续说有一个优化,并要求我们认识到:
n = n/2 + n/2
Run Code Online (Sandbox Code Playgroud)
我们也可以这么说
a^n = ((a^n/2)^2) (a to the n equals a to the n over 2, squared)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我理解.从这些方程式中,他推导出一种仅执行O(lg n)乘法的算法.
function power(a, n)
if (n = 0)
return(1)
x = power(a,n/2)
if (n is even)
return(x^2)
else
return(a*x^2)
Run Code Online (Sandbox Code Playgroud)
似乎x必须是到目前为止计算的当前值.但是在读完这几次之后,我仍然不明白他是如何从这些方程中设计出这种算法,甚至是如何工作的.谁能解释一下?
在构造函数初始化器中传递新对象是明智的还是愚蠢的?
例如:
class Mallard
{
public:
Mallard()
: s(new SomeLargeObject(5)) {}
private:
SomeLargeObject * s;
};
Run Code Online (Sandbox Code Playgroud) 我正在阅读Skiena的"算法设计手册".
第一章阐述了Big O符号的正式定义:
f(n) = O(g(n))意味着c * g(n)是上限f(n).即,存在一些常数c,对于足够大的n ,f(n)总是小于或等于c * g(n).(即n >= n0某些常数n0)
这很好,也很有意义.
但后来作者继续描述特定功能的大O: 3n^2 - 100n + 6
他说这O(3n^2 - 100n - 6)不等于O(n).而他的理由是,对于c我选择的任何一个,c * n总是< 3n^2何时n>c.这是真的,但那(-100n + 6)部分呢?
让我们说我选择c = 1和n = 2.
3n^2 - 100n + 6 = 12 - 200 + 6 = -182 …
我已经在stackoverflow的其他地方读过,在Python中检查空字符串的最优雅方法是(例如,假设它是一个被调用的字符串response):
if not response:
# do some stuff
Run Code Online (Sandbox Code Playgroud)
原因是字符串可以计算为布尔对象.
所以我的问题是,下面的代码是否说同样的事情?
if response == False:
# do some stuff
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
#include <iostream>
template<typename T> class DynArray
{
T *contents;
int size;
public:
explicit DynArray(int initial_size);
};
int main()
{
DynArray<std::string> b('7');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何防止从编译到char的隐式转换?(即这一行:`DynArray b('7');
Skiena在"算法设计手册"中指出插入排序数组是O(n).然而,在排序数组中搜索项目是O(log n),因为您可以进行二进制搜索.
无法插入也是O(log n),如果我进行二进制搜索比较以找出数组应该去哪里?