【发布时间】:2016-01-03 01:25:16
【问题描述】:
我正在学习如何使用迭代器,但在概念化如何使用它们从双循环构造向量时遇到了麻烦。
这是一个示例:假设我想编写一个函数,该函数输入两个向量,并输出一个向量,该向量包含通过组合每个向量中的单个元素生成的所有可能的和(这是一个人为的示例)。这是一个工作版本:
#include <RcppArmadillo.h>
using namespace Rcpp;
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::colvec test(arma::colvec x, arma::colvec y) {
arma::colvec out(x.size()*y.size());
arma::colvec::iterator ix,iy;
int count=0;
for (ix=x.begin();ix!=x.end();ix++) {
for (iy=y.begin();iy!=y.end();iy++) {
out(count)=*ix+*iy;
count+=1;
}
}
return out;
}
/*** R
test(c(1:15),c(15:1))
*/
这很好用,但我觉得使用 count 作为 out 向量的临时迭代器似乎不太优雅,我觉得必须有更好的解决方案。我希望这样的事情会起作用:
arma::colvec::iterator ix,iy,io;
for (ix=x.begin(),io=out.begin();ix!=x.end(),io!=out.end();ix++,io++) {
for (iy=y.begin();iy!=y.end();iy++,io++) {
*io=*ix+*iy;
}
}
这会使我的计算机崩溃,所以我猜我不能让io 对每个循环进行迭代。如果有人能指出在这种情况下什么是好的做法,我将不胜感激。
问候
【问题讨论】:
-
`count`确实是一个临时的迭代器,但它的逻辑是正确的。如果您在不添加或移动代码的情况下直接转换为真正的迭代器,它就会起作用。 IE。 "初始化,{使用,增量}"
标签: c++ iterator iteration rcpp armadillo