我正在尝试解决Rcpp中的word break problem。我唯一要做的事情是将所有可能的解决方案放入StringVector的向量中,而不是在屏幕上打印出来。我试图将一个名为container
的StringVector向量传递给该函数。找到新的解决方案后,将其推回container
。但是,这不起作用。调用函数后,容器仍然为空。如果修改更改了向量的长度,似乎Rcpp不允许``就地修改''。有人知道我在做什么错吗,或者我应该如何实现呢?非常感谢!
这是我的代码:
// [[Rcpp::export]]
String paste_strings(StringVector x, int begin, int end) {
String out;
for (int i=begin; i < end + 1; i++) {
out += x[i];
out += "\t";
}
return out;
}
// [[Rcpp::export]]
bool word_in_dict(String x, StringVector dict) {
int n_word = dict.size();
for (int i = 0; i < n_word; i++) {
if (x == dict[i]) {
return true;
}
}
return false;
}
// [[Rcpp::export]]
void seq_seg_util_cpp(StringVector x, StringVector dict, StringVector prev_out, std::vector<StringVector> container) {
int n = x.size();
for (int i = 0; i < n; i++) {
String prefix = paste_strings(x, 0, i);
if (word_in_dict(prefix, dict)) {
prev_out.push_back(prefix);
if (i == (n-1)) {
container.push_back(prev_out);
// Rcout << prev_out << "\n";
return;
}
StringVector new_x;
for (int j = i+1; j < n; j++) new_x.push_back(x[j]);
seq_seg_util_cpp(new_x, dict, prev_out, container);
}
}
}
// [[Rcpp::export]]
void seq_seg_cpp2(StringVector x, StringVector dict, std::vector<StringVector> container) {
StringVector prev_out = StringVector::create();
seq_seg_util_cpp(x, dict, prev_out, container);
}
在R中,
> x <- c("a", "b", "c")
> dict <- c("a\t", "b\t", "c\t", "b\tc\t")
> all_splits <- list()
> seq_seg_cpp2(x, dict, all_splits)
> all_splits
list()