小编Mat*_*haq的帖子

指针,智能指针或共享指针?

我正在使用普通指针编程,但我听说像Boost这样的库实现了智能指针.我还看到在Ogre3D渲染引擎中有一个深度使用共享指针.

三者之间究竟有什么区别,我应该坚持使用它们的类型吗?

c++ pointers

115
推荐指数
5
解决办法
11万
查看次数

像sublimetext一样的Vim多行编辑?

我开始使用gvim,我不太明白gvim中的多行编辑是如何工作的.

例如:

原文:

asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
Run Code Online (Sandbox Code Playgroud)

ctrl + q,jjjjjj,$ everything被选中,然后我按I进行多行插入.

我的意图是在第一行插入引号,然后按Esc:

asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
Run Code Online (Sandbox Code Playgroud)

发生了什么?我期望一种类似于sublimetext的行为:

在此输入图像描述

如果你不知道它是如何工作的,它只是重复每一行的动作.怎么能实现呢?vim在这做什么?

vim text-editor sublimetext

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

103
推荐指数
5
解决办法
8万
查看次数

如果 Python 字符串是不可变的,为什么当我使用 += 附加到它时它会保持相同的 id?

Python 中的字符串是不可变的,这意味着值不能更改。但是,当附加到以下示例中的字符串时,由于 id 保持不变,因此原始字符串内存看起来已被修改:

>>> s = 'String'
>>> for i in range(5, 0, -1):
...     s += str(i)
...     print(f"{s:<11} stored at {id(s)}")
... 
String5     stored at 139841228476848
String54    stored at 139841228476848
String543   stored at 139841228476848
String5432  stored at 139841228476848
String54321 stored at 139841228476848
Run Code Online (Sandbox Code Playgroud)

相反,在以下示例中,id 发生变化:

>>> a = "hello"
>>> id(a)
139841228475760
>>> a = "b" + a[1:]
>>> print(a)
bello
>>> id(a)
139841228475312
Run Code Online (Sandbox Code Playgroud)

python string reference string-concatenation immutability

102
推荐指数
2
解决办法
6958
查看次数

为什么四元数用于旋转?

我是一名物理学家,并且一直在学习一些编程,并且遇到很多人使用四元数进行旋转而不是以矩阵/向量形式编写东西.

在物理学中,有很好的理由我们不使用四元数(尽管偶尔讲述汉密尔顿/吉布斯/等的奇怪故事).物理学要求我们的描述具有良好的分析行为(这具有精确定义的含义,但是在一些相当技术的方面远远超出了正常介绍类中教导的内容,所以我不会详细讨论).事实证明,四元数没有这种好的行为,所以它们没用,而矢量/矩阵也没用,所以我们使用它们.

然而,仅限于刚性旋转和不使用任何分析结构的描述,可以以任一方式(或其他一些方式)等效地描述3D旋转.

一般情况下,我们只是想要一个点X =(X,Y,Z)的映射到一个新的点X '=(X',Y",Z ')受约束X 2 = X' 2.并且有很多事情可以做到这一点.

天真的方法是只绘制这个定义的三角形并使用三角学,或者使用点(x,y,z)和向量(x,y,z)和函数f(X)= X'之间的同构,使用一些其他方法(x,y,z)T(a,b,c)(x',y',一个矩阵MX = X',或使用四元数,或沿旧方法投射旧矢量的分量. z')等

从数学的角度来看,这些描述在这个设置中都是等价的(作为一个定理).它们都具有相同数量的自由度,相同数量的约束等.

那么为什么四元数似乎比矢量更受欢迎呢?

我看到的通常原因是没有云台锁或数字问题.

没有万向节锁定论证似乎很奇怪,因为这只是欧拉角的问题.它也只是一个坐标问题(就像极坐标中r = 0处的奇点(Jacobian松散等级)),这意味着它只是一个局部问题,并且可以通过切换坐标,旋转出简并性来解决,或使用两个重叠的坐标系.

我对数字问题不太确定,因为我不清楚这些(以及任何替代方案)是如何实现的.我已经读过,对四元数进行重新规范化比对旋转矩阵进行重新规范化更容易,但这只适用于一般矩阵; 一个旋转具有额外的约束,使得这些约束变得无足轻重(这些约束被内置到四元数的定义中)(事实上,这必须是真的,因为它们具有相同数量的自由度).

那么使用四元数而不是向量或其他替代方法的原因是什么?

3d matrix quaternions rotational-matrices

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

用于在bash中转义字符串的命令

我需要一个bash命令,将字符串转换为转义的字符串.这是一个例子:

echo "hello\world" | escape | someprog
Run Code Online (Sandbox Code Playgroud)

escape命令将"hello\world"变为"hello \\ world".然后,someprog可以按预期使用"hello\world".当然,这是我将要做的事情的简化示例.

bash escaping

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

Android图表库

我正在努力寻找一个快速可靠的图表库.经过一番搜索,我发现4个库:AChartEngine,WilliamChart,HelloChartsAndroidPlot.我需要一些关于这些库的性能和稳定性的最新反馈,因为我能找到的所有信息都已过时.

charts android achartengine androidplot mpandroidchart

86
推荐指数
5
解决办法
11万
查看次数

为什么strncpy不为null终止?

strncpy()据说可以防止缓冲区溢出.但是如果它在没有null终止的情况下防止溢出,那么随后的字符串操作将会溢出.所以为了防止这种情况,我发现自己在做:

strncpy( dest, src, LEN );
dest[LEN - 1] = '\0';
Run Code Online (Sandbox Code Playgroud)

man strncpy 得到:

strncpy()函数类似,只是复制了不超过n个字节的src.因此,如果src的前n个字节中没有空字节,则结果将不会以空值终止.

没有null终止看似无辜的东西,如:

   printf( "FOO: %s\n", dest );
Run Code Online (Sandbox Code Playgroud)

......可能会崩溃


是否有更好,更安全的替代品strncpy()

c strncpy

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

使用Dispatcher.Invoke从非主线程更改WPF控件

我最近开始在WPF编程并遇到了以下问题.我不明白如何使用该Dispatcher.Invoke()方法.我有线程经验,我做了一些简单的Windows窗体程序,我只是使用了它

Control.CheckForIllegalCrossThreadCalls = false;
Run Code Online (Sandbox Code Playgroud)

是的我知道这很蹩脚,但这些都是简单的监控应用程序.

事实是,现在我想提出一个WPF应用程序在后台检索数据,我开始了一个新的线程进行调用来检索(从网络服务器)的数据,现在我要显示它在我的WPF形式.问题是,我不能从这个线程设置任何控制.甚至没有标签或任何东西.怎么解决这个问题?

回答评论:
@Jalfp:
所以当我得到数据时,我在'new tread'中使用这个Dispatcher方法?或者我应该让后台工作程序检索数据,将其放入一个字段并启动一个等待该字段填满的新线程并调用调度程序将检索到的数据显示到控件中?

c# wpf multithreading dispatcher

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

c ++:用逗号格式化数字?

我想编写一个方法,它将采用一个整数并返回一个std::string用逗号格式化的整数.

示例声明:

std::string FormatWithCommas(long value);
Run Code Online (Sandbox Code Playgroud)

用法示例:

std::string result = FormatWithCommas(7800);
std::string result2 = FormatWithCommas(5100100);
std::string result3 = FormatWithCommas(201234567890);
// result = "7,800"
// result2 = "5,100,100"
// result3 = "201,234,567,890"
Run Code Online (Sandbox Code Playgroud)

将数字格式化为string逗号的C++方式是什么?

(奖金也将用于处理double.)

c++ comma number-formatting

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