[Rcpp-devel] integer arrays as arguments for a module function
Chris DuBois
chris.dubois at gmail.com
Sat Aug 13 01:59:06 CEST 2011
Point taken: STL looks like the way to go in general.
In my particular example, however, the arrays get immediately cast to
another structure foo (somebody else's code). So I need to cast from
IntegerVector to int[] before they get cast to foo[]. What you suggested
works perfectly (and makes sense in hindsight).
Is the story identical for char[]? Where x is a CharacterVector, I tried
char* a = x.begin();
and got
error: cannot convert ‘Rcpp::Vector<16>::iterator’ to ‘char*’ in assignment
Any help much appreciated.
Chris
On Fri, Aug 12, 2011 at 3:19 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> On 12 August 2011 at 14:50, Chris DuBois wrote:
> | Hi all,
> |
> | I'm trying to figure out how to pass in an array of integers to a
> function
> | inside a module. For example, adding the following function to
> runit.Module.R
> | works fine:
> |
> | int bla3( IntegerVector x ) {
> | return sum(x);
> | }
> |
> | However, I need to pass an int array, rather than an IntegerVector.
> Using int
> | x[] in the arguments doesn't compile (though I'm unfamiliar with C++ in
> | general, so maybe this shouldn't work anyway).
> |
> | Alternatively, should I just cast x from an IntegerVector to an int
> array? I
> | tried various permutations of as, vector, <int>, etc, and would like to
> learn
> | the proper way of doing this.
>
> You generally do not want old school x[] arrays in C++. Why? Because STL
> vectors do _everything_ they do at (essentially) zero added cost, free you
> from malloc/free and still allow you to access the straight memory should
> you
> need to (to talk to a C API, say).
>
> So use IntegerVector for _the interface_. You can the, if you must, do
>
> IntegerVector x;
>
> int a1[] = x.begin(); // STL-style iterator to beginning of memory
> int *a2 = x.begin(); // idem
>
> Hope this helps, Dirk
>
> --
> Two new Rcpp master classes for R and C++ integration scheduled for
> New York (Sep 24) and San Francisco (Oct 8), more details are at
>
> http://dirk.eddelbuettel.com/blog/2011/08/04#rcpp_classes_2011-09_and_2011-10
>
> http://www.revolutionanalytics.com/products/training/public/rcpp-master-class.php
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20110812/303d974c/attachment-0001.htm>
More information about the Rcpp-devel
mailing list