小编pyr*_*hic的帖子

跳转到vim中的函数定义

如何使用vim跳转到函数定义?例如,使用Visual Assist,我可以在函数下键入Alt+ g,它会打开一个上下文菜单,列出带有定义的文件.

我怎样才能在vim中做这样的事情?

vim function

223
推荐指数
9
解决办法
19万
查看次数

骑士在棋盘上的最短路径

我一直在为即将到来的编程竞赛练习,我偶然发现了一个我完全不知所措的问题.然而,我觉得这是一个我现在应该学习的概念,而不是交叉指责它永远不会出现.

基本上,它涉及棋盘上的骑士棋子.您将获得两个输入:起始位置和结束位置.目标是计算并打印骑士可以到达目标位置的最短路径.

我从来没有处理过最短路径的事情,我甚至不知道从哪里开始.我采用什么逻辑来解决这个问题?

PS如果它有任何相关性,他们希望你补充骑士的正常动作,同时允许它移动到由骑士可以做的(潜在的)八个动作所形成的方形的四个角,因为方形的中心是骑士的位置.

chess minimization shortest-path search-tree

90
推荐指数
8
解决办法
7万
查看次数

错误,无限循环

我正在阅读Go语言教程.

我想查看这个问题的答案:

注意:fmt.Sprint(e)Error方法内部的调用会将程序发送到无限循环.您可以通过e先转换来避免这种情况:fmt.Sprint(float64(e)).为什么?

我相信这是因为当Sprint调用函数时,由于错误是非零的,所以Error function()将再次调用,依此类推,从而导致无限循环.

go

28
推荐指数
2
解决办法
3712
查看次数

朋友和内联方法,有什么意义?

我在标题中看到我没有写下以下内容:

class MonitorObjectString: public MonitorObject {
   // some other declarations
   friend inline bool operator==(MonitorObjectString& lhs, MonitorObjectString& rhs) { return(lhs.fVal==rhs.fVal); }
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么这个方法被声明为朋友.我认为如果函数在另一个地方定义并且需要访问类的内部成员是有意义的,但这不是这里的情况,因为它是内联的,甚至不需要访问成员.

你怎么看?这位"朋友"没用吗?

c++ methods inline friend

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

为什么我们在赋值运算符重载而不是正负操作中使用引用返回?

正如我在书籍和网络中读到的那样,在C++中,我们可以使用这些原型(作为a的成员函数class Money)重载"加"或"减"运算符:

const Money operator +(const Money& m2) const;

const Money operator -(const Money& m2) const;

对于赋值运算符:

const Money& operator =(const Money& m2);

为什么在赋值运算符重载而不是在加号和减号运算符中使用对Money对象的引用作为返回值?

c++ operator-overloading operators return-by-reference return-by-value

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

为什么我们需要透视划分?

我知道透视划分是通过将x,y和z除以w来完成的,以获得标准化的设备坐标.但我无法理解这样做的目的.此外,它与剪辑有什么关系吗?

opengl opengl-3 opengl-es-2.0

11
推荐指数
2
解决办法
9490
查看次数

从命令行生成的.dSYM文件(Mac)

我刚开始用C编码,并运行其他人的Makefile,默认的C编译器设置为gcc.我在Mac OSX 10.8 Mountain Lion上,我相信我使用"XCode命令行工具"安装了编译器.在命令行上运行"make"后,我会为每个程序获取这些烦人的.dSYM文件.我读到这些是调试文件,但它们真的有必要吗?有没有办法阻止它们从命令行生成?

c macos gcc makefile dsym

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

插入堆的时间复杂度

我试图大多理解Big O和Omega在堆中插入新元素背后的原因.我知道我可以在网上找到答案,但我真的很想透彻理解,而不仅仅是在网上找到答案而只是盲目地记忆.

例如,如果我们有以下堆(以数组格式表示)

 [8,6,7,3,5,3,4,1,2] 
Run Code Online (Sandbox Code Playgroud)

如果我们决定插入一个新元素"4",我们的数组现在看起来就像这样

 [8,6,7,3,5,3,4,1,2,4] 
Run Code Online (Sandbox Code Playgroud)

它将被放置在索引9中,因为这是第0个基于索引的数组,其父级将是索引4,即元素5.在这种情况下,我们不需要做任何事情,因为4 <5并且它不违反二进制堆属性.最好的情况是OMEGA(1).

但是,如果我们插入的新元素是100,那么我们必须调用运行时间为O(log n)的max-heapify函数,因此在最坏的情况下,在堆中插入一个新元素需要O(log n).

如果我错了,有人可以纠正我,因为我不确定我的理解或推理是否是100%?

algorithm heap time-complexity

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

增加指针,精确序列

我刚刚开始学习C,我明白了

*a = *b;
a++;
b++;
Run Code Online (Sandbox Code Playgroud)

*a++ = *b++
Run Code Online (Sandbox Code Playgroud)

是等价的,但这就是线路时实际发生的事情

*a++ = *b++
Run Code Online (Sandbox Code Playgroud)

叫做?有人可以澄清编译器如何解释第二行吗?我知道从右到左的优先级等等,但是有人可以准确地编写编译器用来解释这行代码的步骤吗?

c pointers increment

8
推荐指数
1
解决办法
1107
查看次数

二进制搜索终止条件

每当我迭代地执行二进制搜索时,我总是很困惑我是否应该使用while (low < high)while(low <= high).

虽然两者都有效但有人能告诉我一个人的实际优势是什么?

algorithm binary-search

7
推荐指数
2
解决办法
2351
查看次数