我在 Rcpp 中创建了一个双 for 循环,以便在下一个可用单元格中有 5 的列中向上移动一个单元格,所有 1 都为 1。当我编译代码时,我没有收到任何错误,但代码确实在矩阵中移动了 1,它只返回相同的矩阵。让我们取一个原始矩阵,比如命名为 t:
5 1 1 1 1
1 5 5 5 1
5 5 1 5 5
5 0 0 5 1
5 5 0 1 1
运行代码 up_rcpp(t,5,5) 后,我应该得到以下结果
1 5 1 1 1
5 5 1 5 1
5 5 5 5 1
5 0 0 5 5
5 1 0 1 1
下面是我的rcpp代码:
#include <Rcpp.h>
using namespace Rcpp;
//[[Rcpp::export]]
Rcpp::NumericMatrix up_rcpp(Rcpp::NumericMatrix main, int r, int c) {
Rcpp::NumericMatrix t = clone(main);
for (int j=0; j <= c-1; ++j) {
for (int i=0; i <= r-2; ++i){
if ((t(i,j) == 5) & (t(i+1, j) == 1))
{
main(i, j) = 1;
main(i + 1, j) = 5;
}
}
for (int i= r-1; i == r-1; ++i){
if ((t(i, j) == 5) & (t(1, j) == 1))
{
main(i, j) = 1;
main(1, j) = 5;
}
}
}
return main;
}