如果我有类型的指针,T (T*)并且我有一个数组,T* array[N]这两个方法是否允许我稍后检查哪些条目是空指针懒惰地初始化每个桶中的东西?
memset(array, 0, sizeof(T*)*N);
要么
for (int i = 0; i < N; ++i)
array[i] = NULL;
Run Code Online (Sandbox Code Playgroud)
即memset电话会让我以后再做if (array[i] == NULL) ...吗?
如果不是,我不想引入未定义的行为..
我宣布1乘6矩阵A说:
A <- matrix(1:6, nrow=1)
Run Code Online (Sandbox Code Playgroud)
我然后做暗淡(A)并且按照预期我得到1乘6 ...然后我做A [,2:5]我希望这是一个1到4的矩阵,条目2,3,4 ,5 ......但是暗淡(A [,2:5])给我NULL!它降级为矢量或其他东西.我怎么能避免这个?
我最终会尝试做类似的事情:
A[,a:b] %*% X[a:b,a:b] %*% t(A[,a:b])
Run Code Online (Sandbox Code Playgroud)
改变a和b所以我只能将上述矩阵的一部分相乘...但是当A衰变成向量时,这会中断...
谢谢
我看到一个perl one liner生成一些8个字符的随机字符串:
perl -le 'print map { ("a".."z")[rand 26] } 1..5'
但是如果没有{}for map,这不起作用.这是为什么?
在我启动ESS缓冲区(使用Mx R)的那一刻,我得到的命令输出仅占用列宽的大约60个字符(特别是在显示具有长列名的数据帧时).我想知道是否有一种简单的方法来调整这个限制.
我刚尝试通过运行以下内容为emacs生成一些标签:
ctags -e --extra=+q --sort=yes -R /codebase/one /codebase/two /usr/include /usr/include/c++
Run Code Online (Sandbox Code Playgroud)
我把它放在我的主目录的某个子目录中.然后我导航到,例如,codebase/one并执行M-x visit tags-table并加载那个,它抱怨:
File /home/palchan/.tags/tags is not a valid tags table
Run Code Online (Sandbox Code Playgroud)
为什么这不是一个有效的标签表?
我在ubuntu中安装了emacs(使用sudo apt-get install emacs).我讨厌的问题是,当我尝试从emacs中运行shell命令时(例如M-! ls)输出前面是这样的:
bash: cannot set terminal process group (-1): Invalid argument
bash: no job control in this shell
Run Code Online (Sandbox Code Playgroud)
在我的.emacs我都可以选择(setq shell-command-switch "-ic").这样我可以使用我的别名和命令.这没有给我工作上的问题,它让我使用我的别名.我如何使用我的别名但避免这个问题?
我经常发现自己需要连续多次查询和替换操作,因为例如我想要在一行中更改23到24的所有出现,然后在下一行中更改24到25,依此类推(通常因为我写的)一行中的表达式,我在后续行中多次猛拉,需要稍微修改)...
在这样的情况下,使用Cx q或常规执行多个查询替换的宏似乎不够强大..是否有更通用/更灵活的处理变量替换或可变宏变体这样我可以研究一下?我相信我曾经遇到过网络上的一个例子,其中lisp表达式被引入到某些命令中以便更强大但是我不记得这个或我在哪里读到它...
如果我有一个进程,a.out我可以./a.out | grep foo看到由foo过滤的a.out的stdout.我也可以说./a.out 2>&1 | grep foo看到错误和错误都被foo过滤掉了.使用该tee命令,我可以将stdout发送到终端和可能的文件输出.但有没有办法分别过滤这些?如:
./a.out | tee grep foo file.txt
Run Code Online (Sandbox Code Playgroud)
但是这样的东西file.txt被过滤以匹配foo但不是我在屏幕上看到的......或者更好的是我在屏幕上看到的被baz过滤而不是foo?如果没有办法在bash中这样做我会写自己的"发球台",但我想有一些方法......
今天我在 emacs shell 中运行了一个这样的命令:
./someBinary | grep foo | cut -c30- | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)
这在 bash 中需要一点但不那么长(大约 15 秒),因为输出很容易超过一百万行。然而,当我在 emacs shell 中运行这个命令时,我等了一个多小时,它仍在运行,如果我检查top. 我想知道这是不是因为 emacs 实现了我在 lisp 中使用的 unix 工具——如果这是原因,是否有办法让它默认为系统工具。
我为pthread_mutex_t编写了一个超级简单的包装器,用于在两个进程之间使用:
//basic version just to test using it between two processes
struct MyLock
{
public:
MyLock() {
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP);
pthread_mutex_init(&lock, &attr);
}
~MyLock() {
pthread_mutex_destroy(&lock);
pthread_mutexattr_destroy(&attr);
}
lock() {
pthread_mutex_lock(&lock);
}
unlock() {
pthread_mutex_unlock(&lock);
}
private:
pthread_mutexattr_t attr;
pthread_mutex_t lock;
};
Run Code Online (Sandbox Code Playgroud)
我能够看到这个锁在一个进程中的常规线程之间正常工作,但是当我运行进程A时,它在共享内存区域中执行以下操作:
void* mem; //some shared memory from shm_open
MyLock* myLock = new(mem) MyLock;
//loop sleeping random amounts and calling ->lock and ->unlock
Run Code Online (Sandbox Code Playgroud)
然后进程B打开共享内存对象(通过设置它与内存的相同区域的字符组合进行验证)并执行以下操作:
MyLock* myLock = reinterpret_cast<MyLock*>(mem);
//same loop for locking and unlocking as process A …Run Code Online (Sandbox Code Playgroud)