小编Jan*_*dec的帖子

规范化Unicode

在Python中是否有一种标准方法来规范化unicode字符串,以便它只能理解可用于表示它的最简单的unicode实体?

我的意思是,一些东西,想翻译的顺序['LATIN SMALL LETTER A', 'COMBINING ACUTE ACCENT']['LATIN SMALL LETTER A WITH ACUTE']

看看问题出在哪里:

>>> import unicodedata
>>> char = "á"
>>> len(char)
1
>>> [ unicodedata.name(c) for c in char ]
['LATIN SMALL LETTER A WITH ACUTE']
Run Code Online (Sandbox Code Playgroud)

但现在:

>>> char = "a?"
>>> len(char)
2
>>> [ unicodedata.name(c) for c in char ]
['LATIN SMALL LETTER A', 'COMBINING ACUTE ACCENT']
Run Code Online (Sandbox Code Playgroud)

当然,我可以迭代所有字符并进行手动替换等,但效率不高,我很确定我会错过一半的特殊情况,并且会犯错误.

python unicode python-3.x

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

在O(n)时间内找到nxn矩阵中的局部最小值

所以,这不是我的家庭工作问题,而是取自关于算法和数据结构(现已完成)课程的未分级作业.

您将获得一个n×n个不同数字的网格.如果数字小于其所有邻居,则该数字是局部最小值.(一个数字的邻居是紧靠上方,下方,左侧或右侧的一个.大多数数字有四个邻居;侧面的数字有三个;四个角有两个.)使用分而治之的算法设计用于计算局部最小值的范例,仅对数字对进行O(n)比较.(注意:由于输入中有n 2个数字,因此您无法查看所有数字.提示:考虑哪种类型的重复会为您提供所需的上限.)

由于数字不是任何顺序,我不知道除了O(n 2)比较之外我们怎么能逃脱任何事情.

algorithm search

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

如何在vim中发出哔哔声

有没有办法明确要求vim发出蜂鸣声,最好不必运行外部命令?

原因是我经常运行:make需要很长时间的命令(例如),所以我开始做其他事情,但是我需要警告任务完成的事实.所以没有错误会导致vim发出哔哔声,但是我可以运行任意命令,所以我需要一些能让它发出哔哔声的命令(好吧,运行外部程序它是可行的,但我更喜欢更便携的方法).

vim

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

知道自己的偏移量的C++类成员变量

是否有可能有一个成员变量,它能够从指向自身的指针计算指向包含对象的指针(在它的方法中)?

让我们在API中包含一个外部调用接口,如下所示:

template <typename Class, MethodId Id, typename Signature>
class MethodProxy;

template <typename Class, MethodId Id, typename ReturnT, typename Arg1T>
class MethodProxy<Class, Id, ReturnT ()(Arg1T) {
  public:
    ReturnT operator()(Class &invocant, Arg1T arg1);
};
Run Code Online (Sandbox Code Playgroud)

类似地,对于从0到N的其他数量的参数.对于外来的每个类,一个C++类声明具有一些特征,并且该模板使用这些特征(以及参数类型的更多特征)来查找和调用外部方法.这可以像:

Foo foo;
MethodProxy<Foo, barId, void ()(int)> bar;
bar(foo, 5);
Run Code Online (Sandbox Code Playgroud)

现在我想做的是以Foo这种方式定义,我可以这样称呼:

Foo foo;
foo.bar(5);
Run Code Online (Sandbox Code Playgroud)

不重复签名多次.(显然创建一个静态成员并在方法中包装调用很简单,对吧).嗯,事实上,这仍然很容易:

template <typename Class, MethodId Id, typename Signature>
class MethodMember;
template <typename Class, MethodId Id, typename ReturnT, typename Arg1T>
class MethodMember<Class, Id, ReturnT ()(Arg1T) {
    MethodProxy<Class, Id, Signature> method;
    Class …
Run Code Online (Sandbox Code Playgroud)

c++ templates properties offsetof

11
推荐指数
1
解决办法
3082
查看次数

更改逃犯的Gstatus窗口高度

我正在使用Tim Pope的Fugitive插件,我希望更改:Gstatus默认高度.我怎么能做到这一点?

git vim

11
推荐指数
3
解决办法
1476
查看次数

为什么enable_shared_from_this嵌入弱指针而不是直接嵌入引用计数器?

enable_shared_from_this助手包含被创建共享指向对象时设置的弱指针.这意味着有一个引用计数(单独分配或与使用的对象一起分配make_shared)和一个额外weak_ptr的对象.

现在为什么不简单地包含引用计数呢?shared_ptr从哑指针设置时,必须完全定义类型,因此shared_ptr构造函数或赋值运算符可以检测从中派生的类型enable_shared_from_this并使用正确的计数器,并且格式可以保持不变,因此复制无关紧要.实际上,shared_ptr已经有必要检测它来设置嵌入式weak_ptr.

c++ shared-ptr c++11 enable-shared-from-this

10
推荐指数
1
解决办法
1236
查看次数

在Android上查找SD卡卷标

是否有可能找到插入Android设备的SD卡的卷标?

据我所知,Android设计只有一个"外部存储"(如返回Environment.getExternalStorageDirectory()),但有很多设备在内部将内部闪存作为"外部存储",并在其下安装SD卡或甚至更复杂的组合(见另一个问题).可以通过阅读来枚举这些附加设备/proc/mounts,但我们需要一些东西来识别用户.有没有机会获得他们的卷标?

我检查了Linux vfat驱动程序完全忽略了卷标签dentry,而且blkid从util-linux 读取了vfat本身.我还检查过,至少在我的设备上,SD卡的块设备有模式660和所有者root.root,所以我不能这样做.所以基本上它归结为是否有任何可以读取它的实用程序.

linux android android-sdcard

10
推荐指数
1
解决办法
6546
查看次数

如何防止部分用户从Android市场升级应用程序?

我们有一个应用程序,它本身可以免费下载,但可以使用付费的许可数据.一些用户购买特定版本的数据,而其他用户购买权利使用最新数据一段时间.现在随着应用程序的发展,它最终会停止支持早于某个日期的数据.很明显,那些拥有这些数据许可但没有新数据许可证的用户不想升级.但是,如果我们在市场上发布新版本,他们会看到它,如果他们升级,他们将难以降级回实际适用于他们的版本.

那么我们能以某种方式指示市场应用程序不为特定用户提供升级或为实现这一目的而进行一些黑客攻击吗?

我们目前使用完全独立于市场的机制来销售和检查数据的许可证,但如果它可以帮助解决问题,可以考虑不同的机制(如Android内置应用程序计费支持或其他).

android google-play

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

`throw(...)`语法来自哪里?

在我们的应用程序中,我们有一些(成员,但这应该无关紧要)函数声明为

void SomeFunction(Type argument) throw (...);
Run Code Online (Sandbox Code Playgroud)

用Microsoft Visual C++编译就好了.但现在我正在尝试使用GCC编译它并拒绝...as语法错误.我记得很久以前就听说过这个结构,但是看看规范,C++ 03和C++ 11似乎都不允许...这样,我不记得从哪里得到它.有没有人知道这个(显然没有意义)构造的起源?

c++ history

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

抛出新表达式的参数子表达式时释放内存

动态分析在我们的代码库中发现了奇怪的内存泄漏.有问题的代码如下:

Something *p = new Something(getArgument());
Run Code Online (Sandbox Code Playgroud)

功能getArgument()有时会抛出的地方.当它抛出时,新分配的对象被泄露.这是由Visual Studio 2015(MSC++ 19.0)编译的.

现在,当我检查规范(C++ 14最终草案)时,§5.3.4/ 8奇怪地说:

新表达 可以通过调用一个获得所述对象存储分配功能(3.7.4.1).如果 new-expression通过抛出异常终止,它可以通过调用释放函数释放存储(3.7.4.2).如果分配的类型是非数组类型,则分配函数的名称为operator new,并且释放函数的名称为operator delete.如果分配的类型是数组类型,则分配函数的名称为operator new[],并且释放函数的名称为operator delete[].

使用'may'(我上面突出显示)这意味着编译器可以自由地不这样做.

这是这样的:

  1. 在规范中的其他地方按要求声明,使其成为Visual C++编译器中的错误(可能仅在某些条件下发生;不检查它是多么通用),
  2. 规范中的错误,或
  3. 出于某种原因写这种方式?

注意:代码在表达式完成时会正确删除对象.这没有错误.问题严重在于new-expression抛出时会发生什么.

c++ memory-leaks exception-handling visual-c++ language-lawyer

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