rcpp 编译错误
Compile error in rcpp
当我在 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;
}
感谢您的帮助
当您调用 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())) {
当我在 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;
}
感谢您的帮助
当您调用 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())) {