假设您要编写一个产生对象列表的函数,并且事先知道此n列表的长度.
在python中,列表支持O(1)中的索引访问,因此可以预先分配列表并使用索引访问它而不是分配空列表并使用该append()方法.这是因为如果空间不足,我们可以避免扩展整个列表的负担.
如果我正在使用python,那么在任何情况下表演都不是那么相关,但是预先分配列表的更好方法是什么?
我知道这些可能的候选人:
[None] * n →分配两个列表[None for x in range(n)]- 或者xrange在python2中→构建另一个对象一个明显优于另一个?
如果我们是这样的话n = len(input)怎么办?既然input已经存在,[None for x in input]会有更好的表现[None] * len(input)吗?
如果.spec使用ViM 创建文件,编辑器将使用骨架.相当方便!
然而,这让我觉得生成的%setup宏有这个-q我无法在任何地方找到的标志.
我没有在宏上的max-rpm指南页面上找到任何提及,并且没有扩展rpmspec:rpmspec --eval '%setup'只返回%setup,并且-p不会改变任何东西.其他相关文档中也没有提到它.
经过进一步的调查,我注意到有很多宏不会被扩展rpmspec,即使我能找到很多宏/usr/lib/rpm(在我的Fedora上).
所以我想知道:
-q用?--test标志rpm -b.我可以在我的系统上看到没有rpm -b,实际上我完成了所有的工作rpmbuild.在rpmbuild那里没有--test旗帜.如何查看扩展脚本?根据这本参考手册
对于每个std :: atomic(无论是否专门),std :: atomic :: value_type都是X.
但是如果我尝试使用这种类型,我会收到编译错误.
我尝试过g++ 8.2.1:
$ g++ -std=c++11 test.cc
test.cc: In function ‘int main()’:
test.cc:6:23: error: ‘value_type’ is not a member of ‘std::atomic<int>’
std::atomic<int>::value_type x = 0;
Run Code Online (Sandbox Code Playgroud)
并使用clang 6.0.1
$ clang -std=c++11 test.cc
test.cc:6:23: error: no type named 'value_type' in 'std::atomic<int>'
std::atomic<int>::value_type x = 0;
~~~~~~~~~~~~~~~~~~^
Run Code Online (Sandbox Code Playgroud)
前面提到的参考手册也说明......
规范基本上被重写以解决许多问题,特别是添加了成员typedefs value_type和difference_type
然而,P0558R1规范似乎并未禁止存在value_type.
知道发生了什么事吗?
我的一位同事让我意识到P0558R1只是一个提案.
我正在扩展第三部分库提供的课程.该类,我们称之为Foo,有一个reset()方法可以调用,以重新启动Foo的行为.该reset()方法也由类内部使用.
class Foo
{
public:
void reset () {
/* ... */
}
void something () {
reset();
}
};
Run Code Online (Sandbox Code Playgroud)
到目前为止,我需要重载该reset()方法以重置我的其他功能:
class Bar : public Foo
{
public:
void reset() {
/* ...something... */
Foo::reset();
}
};
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于该Foo::reset()方法不是虚拟的,通过调用Bar::something()我得到的Foo::reset()方法调用而不是Bar::reset().
是否有一种方法(不同于超载Foo::something())使其向后虚拟?
我需要管理具有不同优先级的线程池,因此我编写了以下线程启动过程:
static
int startup(thrd_t *thrd, thrd_sync_t *sync, int prio)
{
pthread_attr_t attr;
int err;
struct sched_param param = {
.sched_priority = prio
};
assert(pthread_attr_init(&attr) == 0);
assert(pthread_attr_setschedpolicy(&attr, SCHED_FIFO) == 0);
assert(pthread_attr_setschedparam(&attr, ¶m) == 0);
err = pthread_create(&thrd->handler, &attr, thread_routine, (void *)thrd);
pthread_attr_destroy(&attr);
return err;
}
Run Code Online (Sandbox Code Playgroud)
原则上,不应允许非特权用户执行此代码:pthread_create()调用应返回EPERM,因为运行具有高优先级的线程具有安全隐患.
出乎意料的是,它适用于普通用户,但它根本不尊重给定的优先级.
我尝试通过pthread_attr_t在创建线程后删除和设置调度属性来修改代码:
static
int startup(thrd_t *thrd, thrd_sync_t *sync, int prio)
{
pthread_attr_t attr;
int err;
struct sched_param param = {
.sched_priority = prio
};
err = pthread_create(&thrd->handler, NULL /*&attr*/, thread_routine,
(void *)thrd); …Run Code Online (Sandbox Code Playgroud) 我目前正在开展一个项目,要求我对Alsa进行一些采样.我正在尝试正确配置所有内容,但我仍然坚持如何正确调整我的阅读量.
我的任务似乎有两个基本原则:
snd_pcm_hw_params_get_period_time
snd_pcm_hw_params_get_buffer_size
Run Code Online (Sandbox Code Playgroud)
第一个的名称表明输出将是采样周期的时间长度,但这很奇怪:如果我f = 44100Hz在采样周期(以纳秒为单位)设置采样率应该是T0 = 1e9 / 44100 ~= 22676 ns函数将应答的时间T1 = 725 us = 725000 ns.
同时,即使我被要求使用非锁定原语,我也试图分析锁定'readi'所需的时间,结果证明样本需要T2 = 8028603 ns在最好的情况下时间和T3 = 12436217 ns最坏的情况.
最后我无法弄清楚以下两个是什么意思:
snd_pcm_hw_params_get_buffer_time
snd_pcm_hw_params_get_period_size
Run Code Online (Sandbox Code Playgroud)
我不知道如何测量缓冲区的时间和周期大小,但前者返回相同的值get_buffer_size,而后者返回相同的值get_period_time.
任何提示?
除非我们更改编译器,否则Java会错过import X as Y语法,这在我的情况下很有用:在这个时刻我正在开发一个项目,它有多个具有相同名称的类,但属于不同的包.
我想有类似的东西
import com.very.long.prefix.bar.Foo as BarFoo
import org.other.very.long.prefix.baz.Foo as BazFoo
class X {
BarFoo a;
BazFoo b;
...
}
Run Code Online (Sandbox Code Playgroud)
相反,我完成了类似的事情
class X {
com.very.long.prefix.bar.Foo a;
org.other.very.long.prefix.baz.Foo b;
...
}
Run Code Online (Sandbox Code Playgroud)
这看起来非常有害,但在我的具体情况下,我需要使用水平滚动来浏览我的源代码,并且这样可以使程序更糟糕,这已经是一个混乱.
根据您的经验,这种情况下的最佳做法是什么?
由于深色窗户可以减轻我的眼睛疲劳,因此我想在 gnuplot 终端中设置深色背景。在绘图下方设置一个黑色方块将是一个解决方案,只要这不会影响可读性(深色背景上的黑线......)。
我不想花时间寻找颜色组合,但是通过反转终端颜色,我将得到我所需要的:深色背景和可读的绘图。
有谁知道反转终端的命令,或者支持颜色反转的交互式终端(GNU/Linux 支持)的名称?
提前致谢。
我正在开发的项目使用非标准的分发系统,该系统在内部下载并编译依赖库.对于每个库,此crock为configure脚本启动编译系统的内部目录作为前缀.然后,它运行make和make install,然后它验证通过与搜索的安装目录内容lib/<mylib>.a的文件.最后一步失败了.
为了理解发生了什么,我自己编写了一对随机库,其中包括一个我是作者.我注意到在我的发行版(openSUSE,64位)下,安装路径没有填充/lib,而是填充/lib64.
很明显,这是分发的设置,我很确定这个设置涉及发行版附带的autotools的配置.
有没有办法改变这种行为,或者作为一种替代方法,从系统中读取这些信息(以便我可以修补上面提到的缸)?
谢谢你的帮助
更新:我了解了--libdir旗帜configure,所以我想我可以解决我的问题.我仍然想知道是否有办法通过某种方式查询分发来了解这个细节(例如,阅读一些配置文件).
c ×2
c++ ×2
python ×2
64-bit ×1
alsa ×1
api ×1
autotools ×1
c++11 ×1
clang ×1
color-scheme ×1
django ×1
gcc ×1
gnuplot ×1
import ×1
java ×1
list ×1
macros ×1
opensuse ×1
performance ×1
pthreads ×1
python-3.x ×1
python-huey ×1
real-time ×1
rpm ×1
scheduling ×1
task-queue ×1
virtual ×1