[英]Does converting vectors between Rcpp and C++ (using Rcpp::as or Rcpp::wrap) create a new vector and copy elements?
據我了解,在 Rcpp 和 C++ 之間轉換向量會創建如下新向量。 我的理解對嗎?
將 Rcpp 向量轉換為 C++ 向量時,我們使用Rcpp::as<T>()
(例如Rcpp::as<std::string>
用於Rcpp::CharacterVector
)。 創建std::vector<std::string>
,並將原始 Rcpp 元素作為std::string
復制到 C++ 向量中。 這意味着修改新創建的 C++ 向量元素不會影響原始 Rcpp 向量元素。
將 C++ 向量轉換為 Rcpp 向量時,我們使用Rcpp::wrap()
。 創建相應類型的 Rcpp 向量,並將 C++ 元素作為 Rcpp 對象復制到 Rcpp 向量中。 這意味着修改新創建的 Rcpp 向量元素不會影響原始的 C++ 向量元素。
正確,以下函數執行轉換:
// conversion from R to C++
Rcpp::as<T>();
// conversion from C++ to R
Rcpp::wrap();
簡而言之,將數據從 Rcpp object 移動到 C++ 向量(反之亦然)會導致復制。 此處已對此進行了一些解釋:
有關模板的更多信息,請參閱Rcpp 擴展小插圖。
從Rcpp::*Vector
到std::vector<T>
的成本詳情可以在這里找到:
我應該更喜歡 Rcpp::NumericVector 而不是 std::vector?
避免復制的一種方法是盡可能重復使用 memory。 這里暗示了這一點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.