C++ 在Rcpp中的字符串类型之间转换时出错
我不熟悉使用RCPP,并尝试编写一些代码,从本质上重新创建R中“outer”函数的特例。我必须定义字符串向量,第一个包含模式,第二个包含句子。我正在检查所有句子的所有模式,并试图返回一个矩阵,即每个模式在每个句子中出现的次数 我已经取得了一些进展(尽管我相信你们中的一些人会被我的代码吓坏):C++ 在Rcpp中的字符串类型之间转换时出错,c++,r,rcpp,C++,R,Rcpp,我不熟悉使用RCPP,并尝试编写一些代码,从本质上重新创建R中“outer”函数的特例。我必须定义字符串向量,第一个包含模式,第二个包含句子。我正在检查所有句子的所有模式,并试图返回一个矩阵,即每个模式在每个句子中出现的次数 我已经取得了一些进展(尽管我相信你们中的一些人会被我的代码吓坏): #包括 #包括 #包括 #包括 使用名称空间Rcpp; //[[Rcpp::插件(“cpp11”)]] int addoccurrencess(std::vector&txt,std::vector&pa
#包括
#包括
#包括
#包括
使用名称空间Rcpp;
//[[Rcpp::插件(“cpp11”)]]
int addoccurrencess(std::vector&txt,std::vector&pat)
{
int M=零件尺寸();
int N=txt.size();
int res=0;
/*一个接一个滑动的循环*/
对于(int i=0;i您将变量xstrings
声明为字符串向量
std::vector<std::string> xstrings(x.size());
您声明了另一个字符串向量txt
,并试图使用类型为std;:string
的对象xstrings[i];
对其进行初始化
标准容器std;:vector中没有此类非显式构造函数。因此编译器会发出错误
相反,你可以写一些例子
std::vector< std::string > txt( 1, xstrings[i] );
std::vectortxt(1,xstrings[i]);
编译器正在抱怨,因为您正在声明一个可以保存字符串(即txt)的向量,并试图将其初始化为字符串(即xstrings[i])。它可能还会抱怨行:
std::vector< std::string > pat = ystrings[j];
然后,freqMatrix中的最终循环可以写成:
for(i = 1; i<=x.size(); i++)
{
for(j = 1; j<=y.size(); j++)
{
matrx(i,j) = addOccurrences(xstrings[i], ystrings[j]);
}
}
for(i=1;ixstrings[i]
是一个std::strings
。您试图从中初始化一个std::vector
。这不起作用。我不知道您想在这里做什么:要么忽略元素访问,要么创建一个包含一个元素的范围,例如使用…txt{xstrings[i]}
。因此将其更改为:std::string txt{xstrings[i]}
?我正在尝试获取第I个元素并将其保存为字符串。虽然如果更改类型,可以保持初始化不变,但应该可以工作。要点是创建一个std::initializer_list
以仅使用一个元素初始化向量:std::vector txt{xstrings[I}
。需要什么将取决于实际使用。啊,它已编译!谢谢!哦,R习惯从1开始初始化。谢谢。
std::vector< std::string > txt( 1, xstrings[i] );
std::vector< std::string > pat = ystrings[j];
int addOccurrences(const std::string & txt, const std::string & pat)
{
// do stuff...
}
for(i = 1; i<=x.size(); i++)
{
for(j = 1; j<=y.size(); j++)
{
matrx(i,j) = addOccurrences(xstrings[i], ystrings[j]);
}
}