簡體   English   中英

在 Rcpp 和 C++(使用 Rcpp::as 或 Rcpp::wrap)之間轉換向量是否會創建新向量並復制元素?

[英]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 擴展小插圖。

Rcpp::*Vectorstd::vector<T>的成本詳情可以在這里找到:

我應該更喜歡 Rcpp::NumericVector 而不是 std::vector?

避免復制的一種方法是盡可能重復使用 memory。 這里暗示了這一點:

在 Rcpp 中選擇 NumericVector 和 arma::vec

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM