c++ - 向量的最后一个成员在 Rcpp 中没有给出正确的结果
问题描述
我有一个名为的向量:
ts<- c(1.061786, 1.201682, 1.265509, 1.372124, 1.572853, 1.629114, 1.660798, 1.898390, 1.908208, 1.944675)
. 现在我想从这个向量中创建另一个向量,它给出了连续成员之间的差异。最后一个值 (ts[10]); 区别在于双“T”。
代码如下:
cppFunction("
std::vector<double> res (std::vector<double> ts, double T ){
std::vector<double> newts(ts.size()+1);
newts[0]=0.0;
for(int j=1; j<=ts.size(); j++){
if(j< ts.size()){
newts[j]= ts[j]-ts[j-1];
}
else if (j== ts.size()){
newts[j]= T -ts[j];
}
else{
newts[j]=0.0;
}
}
return newts;
}
")
. res(ts,T=2) 的实际结果应该是这样的:
[1] 0.000000000 0.139895661 0.063826732 0.106615236 0.200729464 0.056260681 0.031683749 0.237591892
[9] 0.009818105 0.036467479 0.05532473
. 但它给了我结果:
[1] 0.000000000 0.139895661 0.063826732 0.106615236 0.200729464 0.056260681 0.031683749 0.237591892
[9] 0.009818105 0.036467479 2.000000000
那就是新向量的最后一个成员不正确。为什么会这样?有什么建议吗?
编辑
即使我使用以下代码:
cppFunction("
std::vector<double> res (std::vector<double> ts, double T ){
std::vector<double> newts(ts.size()+1);
for(int j=0; j<=ts.size(); j++){
if(j==0){
newts[j]=0.0;
}
else if(j< ts.size()){
newts[j]= ts[j]-ts[j-1];
}
else if (j== ts.size()){
newts[j]= T -ts[j];
}
else{
newts[j]=0.0;
}
}
return newts;
}
")
,它仍然给我错误的结果。
解决方案
最好从向量的尾部开始
std::vector<double> res(std::vector<double> ts, double T) {
std::vector<double> newts(ts.size() + 1);
newts[0] = 0.0;
int n = ts.size();
for (int j = n - 1; j > 0; j--) {
newts[j] = ts[j] - ts[j - 1];
}
newts[newts.size() - 1] = T - ts[n - 1];
return newts;
}
这是派生程序
int main() {
std::vector<double> ts{ 1.061786, 1.201682, 1.265509, 1.372124, 1.572853, 1.629114, 1.660798, 1.898390, 1.908208, 1.944675 };
double T = 2;
std::vector<double> result = res(ts, T);
for (auto x : result)
std::cout << x << "\n";
return 0;
}
推荐阅读
- javascript - Content Security Policy
- python - 分发关键字参数的最佳方法?
- node.js - MEAN stack app not opens from instagram profile
- amazon-web-services - s3列表对象使用sdk返回null
- asp.net-core - Using yarn to add a package removes existing modules
- ios - iPhone XR 返回正确的 nativeBounds 但设备上的屏幕尺寸错误
- javascript - How to insert record to SharePoint List Multi Choice Field
- python - SQLAlchemy 多对多与多个表的单个链接
- python - ValueError: filedescriptor out of range in select()
- javascript - 根据端口号获取 tcp/udp 协议名称(字符串)?