小编eol*_*old的帖子

如何将原始类型/字节写入stdout?

我正在努力将原始类型输出到标准输出一段时间.这是我尝试过的,并没有按预期的方式工作:

r <- as.raw(c(0x41, 0x00, 0x43)) # r = "A\0C"
cat(rawToChar(r)) # displays warning and skips data after NULL (outputs "A")
cat(r) # outputs "41 00 43"
writeBin(r, stdout()) # error: can only write to binary connection
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来将所有三个字节/字符打印到stdout.

r stdout binary-data

6
推荐指数
1
解决办法
1880
查看次数

R:将属性值作为向量

我有一个对象,其中一些属性的值为整数,即h =:

attr(,"foo")
[1] 4
attr(,"bar")
[1] 2
Run Code Online (Sandbox Code Playgroud)

我想获得类型的矢量integer(2),v =:

[1] 4 2
Run Code Online (Sandbox Code Playgroud)

我找到了两种笨拙的方法来实现这一目标

as.vector(sapply(names(attributes(h)), function(x) attr(h, x)))
Run Code Online (Sandbox Code Playgroud)

要么:

as.integer(paste(attributes(h)))
Run Code Online (Sandbox Code Playgroud)

我正在寻找的解决方案只需要为我上面描述的基本情况工作,并且需要尽可能快.

attributes r vector

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

Java:寻找可变/可重新引用的弱引用实现

我正在寻找类似的弱引用实现java.lang.ref.WeakReference,但它提供了一种set()方法或一些其他方式来重新引用创建的弱引用对象.这是一个例子:

MutableWeakReference ref = new MutableWeakReference(someObject);
ref.set(anotherObject);
Run Code Online (Sandbox Code Playgroud)

我需要这个以避免对象创建,在我的情况下,将执行时间减慢一个数量级,因为我不断更改我的弱引用引用的对象.

我试图从JDK复制代码,但似乎不可能,因为java.lang.ref.Reference使用sun.misc.Cleaner内部的类.我也看了Android的实现,但它似乎依赖于Dalvik VM的垃圾收集.我想知道这是否真的可以在不改变JVM /环境的情况下实现.

java implementation weak-references mutable

5
推荐指数
0
解决办法
417
查看次数

编译时检查右移是否是对有符号类型的算术运算

我想知道什么是检查签署类型进行操作时右移是算术的最简便的方式(例如:是否-2 >> 1-1)在编译时.

我的想法是在编译时以某种方式检查它并能够检测到这一点,因此我可以编译该函数的不同版本(取决于运算符>>是否真的是算术移位).

通过阅读主题 验证C/C++签名的右移是特定编译器的算术吗?我想到了初始化旗帜的想法

static const bool is_arithmetic_rs = (((signed int)-1)>>1) == ((signed int)-1));
Run Code Online (Sandbox Code Playgroud)

并在运行时测试它像这样:

if (is_arithmetic_rs) {
  // some fast algorithm using arithmetic right shifts (using >> operator)
} else {
  // the same algorithm without arithmetic right shifts (much slower)
}
Run Code Online (Sandbox Code Playgroud)

但是,我希望每次都尽可能避免这种分支.为简单起见,我们假设我想实现一个可移动的算术右移; 如果每次调用函数时都必须检查这个,这会对性能造成巨大影响,所以我想在编译时这样做,如果可能的话.

如果没有可行的方法来进行此检查,是否有办法通过检查尽力而为的方式来完成此操作,例如使用ifdef检查特定的编译器/平台?

c c++ portability bit-manipulation compile-time

5
推荐指数
3
解决办法
1491
查看次数

C++:std :: istream检查EOF而不读取/使用令牌/使用operator >>

我想测试一下是否std::istream已达到最终而没有从中读取.

我知道我可以像这样检查EOF:

if (is >> something) 
Run Code Online (Sandbox Code Playgroud)

但这有一系列问题.想象一下,有许多(可能是虚拟的)方法/函数可以std::istream&作为参数传递.这意味着我必须在每个中执行检查EOF的"家务",可能使用不同类型的something变量,或者创建一些奇怪的包装器来处理调用输入方法的场景.

我需要做的就是:

if (!IsEof(is)) Input(is);
Run Code Online (Sandbox Code Playgroud)

该方法IsEof应保证流不会被更改以进行读取,因此上述行等效于:

Input(is)
Run Code Online (Sandbox Code Playgroud)

关于Input方法中读取的数据.

如果没有可以说明的通用解决方案std::istream,是否有任何方法可以做到这一点std::ifstreamcin

编辑: 换句话说,以下assert应始终通过:

while (!IsEof(is)) {
  int something;
  assert(is >> something);
}
Run Code Online (Sandbox Code Playgroud)

c++ iostream filestream eof

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

用次线性记忆生成排列

我想知道是否有足够简单的算法来生成 N 个元素的排列,比如说1..N,它使用的O(N)内存少于内存。它不必计算第 n 个排列,但它必须能够计算所有排列。

当然,这个算法应该是某种生成器,或者使用一些O(N)内存不足的内部数据结构,因为将结果作为大小的向量返回N已经违反了对次线性内存的限制。

algorithm complexity-theory generator permutation memory-efficient

5
推荐指数
1
解决办法
550
查看次数

Eclipse CDT:在调试/运行之前跳过make/build

我正在调试一个基于Makefile的大型C项目,即使没有对源进行任何更改,也需要15秒才能运行"make".这意味着每当我重新启动程序时,我需要等待15秒才能开始调试.

该项目是通过"使用Makefile导入现有项目"导入的,我使用gdb进行调试.

我希望在重新启动时,它运行最后构建的可执行文件.如何在每次启动/调试之前禁用这个额外的构建步骤(即运行"make")?

(在极少数实际更改源代码的情况下,我愿意进行手动构建/制作)

eclipse debugging makefile skip eclipse-cdt

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

C++:使用std :: ignore返回std :: tie的类型

我想知道C++ 11标准是否对某些参数的返回类型有任何要求.std::tuplestd::tiestd::ignore

更具体地说,我可以假设:

  1. decltype(std::tie(42, std::ignore)) 是不一样的 decltype(std::tie(std::ignore, 42))
  2. decltype(std::tie(42, std::ignore)) 是不一样的 decltype(std::tie(42))
  3. decltype(std::tie(std::ignore, 42)) 是不一样的 decltype(std::tie(42))
  4. decltype(std::tie(std::ignore, std::ignore)) 是不一样的 decltype(std::tie(std::ignore))

换句话说,从类型的角度来看,生成的元组是否表现为一个元组,它具有按位置decltype(std::ignore)匹配std::ignore的所有模板参数的类型?

c++ stl tuples undefined-behavior c++11

5
推荐指数
1
解决办法
788
查看次数

将函数应用于相同大小的连续子向量

我正在寻找一种很好的快速方法来应用一些对向量进行操作的任意函数,例如sum,连续地对连续K元素的子向量.这是一个简单的例子,它应该非常清楚地说明我想要的东西:

v <- c(1, 2, 3, 4, 5, 6, 7, 8)
v2 <- myapply(v, sum, group_size=3) # v2 should be equal to c(6, 15, 15)
Run Code Online (Sandbox Code Playgroud)

该函数应该尝试处理group_size给定向量的元素组并将函数应用于每个组(将其视为另一个向量).在这个例子中,矢量v2如下获得:(1 + 2 + 3)= 6,(4 + 5 + 6)= 15,(7 + 8)= 15.在这种情况下,K没有完全分割N ,所以最后一组的大小小于K.

如果有一个更好/更快的解决方案,只有当N是K的倍数时才有效,我也会很感激.

grouping split r apply

4
推荐指数
1
解决办法
1119
查看次数

如何使用一些长度的NULL扩展列表?

给定一个长度为<=N 的列表,最好/最有效的方法是将尾随NULLs 填充到长度(这样它的长度为N).

这是任何体面语言的单行,但我不知道如何在R中的几行中(有效地)这样做,以便它适用于每个角落情况(零长度列表等) .

null resize r list fill

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