将布尔R矢量传递给C ++ dynamic_bitset
向量的最佳方法是什么?有没有办法使用指针和向量长度来构造一个dynamic_bitset
对象,就像矢量类一样?你会推荐使用Rcpp吗?
谢谢你的帮助和时间......
答案 0 :(得分:2)
我会像这样创建dynamic_bitset
:
#include <Rcpp.h>
#include <boost/dynamic_bitset.hpp>
using namespace Rcpp ;
// [[Rcpp::export]]
void create_dynamic_bitset( LogicalVector x ){
int n = x.size() ;
boost::dynamic_bitset<> bs(n);
for( int i=0; i<n; i++) bs[i] = x[i] ;
// do something with the bitset
for (boost::dynamic_bitset<>::size_type i = 0; i < x.size(); ++i)
Rcout << x[i];
Rcout << "\n";
}
在内部,R逻辑向量只是int
个数组。因此,没有更直接的方法来构建dynamic_bitset
,你有来迭代。
另外,请注意输入LogicalVector
中缺少值。
或者,您可能将输入数据存储为原始向量(Rcpp类RawVector
),使用dynamic_bitset<Rbyte>
并使用块构造函数:
void create_dynamic_bitset( RawVector x ){
boost::dynamic_bitset<Rbyte> bs(x.begin(), x.end());
}