假设一个人在他们的Rcpp代码中使用了NumericVector
,而另一个人使用了vector<double>
。这两种用法之间有显著的区别吗,特别是在性能方面?
一般来说是的。
所有的Rcpp(11)类型都是“薄代理对象”(我们在多个地方讨论过,包括演讲、幻灯片、我的书籍等等),它们围绕着底层的SEXP
对象。(这意味着从R到C++以及从C++返回R时不会产生副本。)
然而,使用像std::vector<T>
这样的标准C++类型通常需要一个副本。
因此,当N
足够大时,您应该很容易看到在某些微不足道的测试脚本上的差异。
就我个人而言,我通常喜欢使用C++ / STL类型进行“清晰”的代码,这种代码“感觉更像C++”,但也意识到性能惩罚。通常情况下,这并不重要,因为C++解决方案比在纯R解决方案中替换的方案更快。
但是你的问题是哪个占主导地位,答案非常明确,是前者占主导地位。