Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Rcpp中的字符串类型之间转换时出错_C++_R_Rcpp - Fatal编程技术网

C++ 在Rcpp中的字符串类型之间转换时出错

C++ 在Rcpp中的字符串类型之间转换时出错,c++,r,rcpp,C++,R,Rcpp,我不熟悉使用RCPP,并尝试编写一些代码,从本质上重新创建R中“outer”函数的特例。我必须定义字符串向量,第一个包含模式,第二个包含句子。我正在检查所有句子的所有模式,并试图返回一个矩阵,即每个模式在每个句子中出现的次数 我已经取得了一些进展(尽管我相信你们中的一些人会被我的代码吓坏): #包括 #包括 #包括 #包括 使用名称空间Rcpp; //[[Rcpp::插件(“cpp11”)]] int addoccurrencess(std::vector&txt,std::vector&pa

我不熟悉使用RCPP,并尝试编写一些代码,从本质上重新创建R中“outer”函数的特例。我必须定义字符串向量,第一个包含模式,第二个包含句子。我正在检查所有句子的所有模式,并试图返回一个矩阵,即每个模式在每个句子中出现的次数

我已经取得了一些进展(尽管我相信你们中的一些人会被我的代码吓坏):


#包括
#包括
#包括
#包括
使用名称空间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;i
xstrings[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]);
    }
}