当我在Rcpp中编译下面的代码时,我在名为stl_algobase.h的文件中收到以下错误:
`no type named 'value_type' in 'struct std::iterator_traits<Rcpp::Vector<14, Rcpp::PreserveStorage> >'`
我使用标准类型声明,因此我不清楚值类型的错误位置。
以下是代码:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::plugins(cpp11)]]
#include <cstddef> // std:size_t
#include <iterator> // std:begin, std::end
#include <vector> // std::vector
#include <iostream>
#include <string>
// [[Rcpp::export]]
bool dupCheckRcpp (const Rcpp::NumericVector vec, const Rcpp::NumericMatrix allMatrix) {
int i, nrow, ncol;
bool flag;
nrow = allMatrix.nrow(); ncol = allMatrix.ncol();
Rcpp::NumericVector vecTmp(ncol);
flag = false;
for (i = 0; i < nrow; ++i) {
// copy to vector
vecTmp = allMatrix[i];
// compare
if (std::equal(vec.begin(),vec.end(),vecTmp)) {
flag = true;
return flag;
}
}
return flag;
}
感谢您的帮助
答案 0 :(得分:2)
当你调用std::equal
时,你需要传递迭代器,而不是整个容器。 http://en.cppreference.com/w/cpp/algorithm/equal
变化
if (std::equal(vec.begin(),vec.end(),vecTmp)) {
到
if (std::equal(vec.begin(),vec.end(),vecTmp.begin())) {