Possibly interesting results; at least to anyone who may typically construct and populate a class in the constructor...
> Rcpp::sourceCpp('VectorCreation.cpp') > v1 <- function(len) {v<-make_preVector(len); v$vec } > v2 <- function(len) {v<-make_postVector(); v$populate(len); v$vec } > identical( v1(10), v2(10) ) [1] TRUE > library(microbenchmark) > microbenchmark( v1(6250000), v2(6250000), times=20 ) Unit: milliseconds expr min lq median uq max neval v1(6250000) 11.556459 11.912062 17.983704 24.14962 45.93693 20 v2(6250000) 9.158329 9.338543 9.516148 15.83003 40.87731 20 _File: VectorCreation.cpp <gist:: https://gist.github.com/Thell/9242382 > // [[Rcpp::plugins("cpp11")]] #include <RcppCommon.h> class preVector; RCPP_EXPOSED_CLASS(preVector) class postVector; RCPP_EXPOSED_CLASS(postVector) #include <Rcpp.h> using namespace Rcpp; class preVector { public: std::vector< int > vec; preVector(int len) : vec(len) { int i(0); while( i < len ) { vec[i] = i; i++; } } }; preVector make_preVector( int len ) { return preVector(len); } RCPP_MODULE(preVector){ class_< preVector >("preVector") .constructor< int >() .field("vec", &preVector::vec) ; function( "make_preVector", &make_preVector ); } class postVector { public: std::vector< int > vec; postVector() {} void populate(int len) { vec = std::vector< int >(len); int i(0); while( i < len ) { vec[i] = i; i++; } } }; postVector make_postVector() { return postVector(); } RCPP_MODULE(postVector){ class_< postVector >("postVector") .constructor() .method("populate", &postVector::populate ) .field("vec", &postVector::vec) ; function( "make_postVector", &make_postVector ); } /*** R v1 <- function(len) {v<-make_preVector(len); v$vec } v2 <- function(len) {v<-make_postVector(); v$populate(len); v$vec } identical( v1(10), v2(10) ) library(microbenchmark) microbenchmark( v1(6250000), v2(6250000), times=20 ) */ -- Sincerely, Thell _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel